Change log for January 13, 2019 Vulkan 1.1.98 spec update:

* Update release number to 98.

Public Issues:

  * Fix missing markup in flink:vkDestroyPipelineLayout valid usage
    statement (pull request 882).
  * Add missing contributors for `<<VK_EXT_buffer_device_address>>` (public
    pull request 891).

Internal Issues:

  * Detect nested bullet points in valid usage blocks and warn about them
    during VUID assignment (internal issue 1382).
  * Update the style guide to document the process for reserving new bits in
    bitmask types (internal issue 1411).
  * Clarify for slink:VkApplicationInfo::pname:apiVersion and in the
    <<fundamentals-validusage-versions, Valid Usage for Newer Core
    Versions>> section when it is valid for an application to use a certain
    version of Vulkan API functionality (for an instance and for a
    device/physical device); and when the validation layers must generate an
    error (internal issue 1412).
  * Add optional <<memory-model-availability-visibility, transitive
    availability/visibility operations to the memory model, including a new
    pname:vulkanMemoryModelAvailabilityVisibilityChains feature for
    slink:VkPhysicalDeviceVulkanMemoryModelFeaturesKHR (internal issue
    1460).
  * Add the code:StorageBuffer storage class to those in the
    <<interfaces-resources-descset, Descriptor Set Interface>> (internal
    issue 1480).
  * Add missing `returnedonly` tags for a number of returned extension
    structures that can be passed in pname:pNext chains (internal issue
    1515).
  * Clean up and rearrange some spec language for
    slink:VkRenderPassCreateInfo and slink:VkAttachmentReference.txt
    (internal issue 1522).
  * Correctly round the code:OpVectorTimesScalar and
    code:OpMatrixTimesScalar SPIR-V operations in the <<Precision of core
    SPIR-V Instructions>> table (internal merge request 2996).
  * Work around cases in flink:vkCmdBeginTransformFeedbackEXT,
    flink:vkCmdEndTransformFeedbackEXT, and
    slink:VkPipelineCoverageModulationStateCreateInfoNV where an array
    parameter is `optional` but the length is not in `vk.xml`. This is an
    interim fix using `noautovalidity` + handcoded VU replacing those that
    should be autogenerated (internal issue 2944 and
    https://github.com/KhronosGroup/Vulkan-ValidationLayers/issues/480).
  * Remove redundant capability validation of the code:float16 and code:int8
    SPIR-V capabilities from the <<spirvenv-capabilities, Capabilities>>
    section, since they are already covered in the preceding table.
  * Update check_spec_links script, including validation for reference page
    open blocks. Fix errors identified by the script.
This commit is contained in:
Jon Leech 2019-01-13 05:53:27 -08:00
parent b59ff9c1fe
commit f1a7c4b4f3
74 changed files with 798 additions and 340 deletions

View File

@ -18,7 +18,7 @@ spec-generate:
# number of them. This is a slightly crude way of enforcing "don't add
# errors" but simpler than the alternatives (running against master,
# diff, etc)
- xml/check_spec_links.py -Werror
- xml/check_spec_links.py -Werror --ignore_count 0
artifacts:
when: always
paths:

View File

@ -8,6 +8,61 @@ public pull requests that have been accepted.
-----------------------------------------------------
Change log for January 13, 2019 Vulkan 1.1.98 spec update:
* Update release number to 98.
Public Issues:
* Fix missing markup in flink:vkDestroyPipelineLayout valid usage
statement (pull request 882).
* Add missing contributors for `<<VK_EXT_buffer_device_address>>` (public
pull request 891).
Internal Issues:
* Detect nested bullet points in valid usage blocks and warn about them
during VUID assignment (internal issue 1382).
* Update the style guide to document the process for reserving new bits in
bitmask types (internal issue 1411).
* Clarify for slink:VkApplicationInfo::pname:apiVersion and in the
<<fundamentals-validusage-versions, Valid Usage for Newer Core
Versions>> section when it is valid for an application to use a certain
version of Vulkan API functionality (for an instance and for a
device/physical device); and when the validation layers must generate an
error (internal issue 1412).
* Add optional <<memory-model-availability-visibility, transitive
availability/visibility operations to the memory model, including a new
pname:vulkanMemoryModelAvailabilityVisibilityChains feature for
slink:VkPhysicalDeviceVulkanMemoryModelFeaturesKHR (internal issue
1460).
* Add the code:StorageBuffer storage class to those in the
<<interfaces-resources-descset, Descriptor Set Interface>> (internal
issue 1480).
* Add missing `returnedonly` tags for a number of returned extension
structures that can be passed in pname:pNext chains (internal issue
1515).
* Clean up and rearrange some spec language for
slink:VkRenderPassCreateInfo and slink:VkAttachmentReference.txt
(internal issue 1522).
* Correctly round the code:OpVectorTimesScalar and
code:OpMatrixTimesScalar SPIR-V operations in the <<Precision of core
SPIR-V Instructions>> table (internal merge request 2996).
* Work around cases in flink:vkCmdBeginTransformFeedbackEXT,
flink:vkCmdEndTransformFeedbackEXT, and
slink:VkPipelineCoverageModulationStateCreateInfoNV where an array
parameter is `optional` but the length is not in `vk.xml`. This is an
interim fix using `noautovalidity` + handcoded VU replacing those that
should be autogenerated (internal issue 2944 and
https://github.com/KhronosGroup/Vulkan-ValidationLayers/issues/480).
* Remove redundant capability validation of the code:float16 and code:int8
SPIR-V capabilities from the <<spirvenv-capabilities, Capabilities>>
section, since they are already covered in the preceding table.
* Update check_spec_links script, including validation for reference page
open blocks. Fix errors identified by the script.
-----------------------------------------------------
Change log for January 05, 2019 Vulkan 1.1.97 spec update:
* Update release number to 97.

View File

@ -115,7 +115,7 @@ VERBOSE =
# ADOCOPTS options for asciidoc->HTML5 output
NOTEOPTS = -a editing-notes -a implementation-guide
PATCHVERSION = 97
PATCHVERSION = 98
ifneq (,$(findstring VK_VERSION_1_1,$(VERSIONS)))
SPECREVISION = 1.1.$(PATCHVERSION)
else

View File

@ -12,7 +12,7 @@ include::meta/VK_AMD_gcn_shader.txt[]
This extension adds support for the following SPIR-V extension in Vulkan:
* https://www.khronos.org/registry/spir-v/extensions/AMD/SPV_AMD_gcn_shader.html[+SPV_AMD_gcn_shader+]
* https://www.khronos.org/registry/spir-v/extensions/AMD/SPV_AMD_gcn_shader.html[`SPV_AMD_gcn_shader`]
ifdef::editing-notes[]
[NOTE]

View File

@ -14,7 +14,7 @@ include::meta/VK_AMD_gpu_shader_half_float.txt[]
This extension adds support for the following SPIR-V extension in Vulkan:
* https://www.khronos.org/registry/spir-v/extensions/AMD/SPV_AMD_gpu_shader_half_float.html[+SPV_AMD_gpu_shader_half_float+]
* https://www.khronos.org/registry/spir-v/extensions/AMD/SPV_AMD_gpu_shader_half_float.html[`SPV_AMD_gpu_shader_half_float`]
ifdef::editing-notes[]
[NOTE]

View File

@ -6,7 +6,7 @@ include::meta/VK_AMD_gpu_shader_int16.txt[]
No known IP claims.
*Interactions and External Dependencies*::
- Requires the
https://www.khronos.org/registry/spir-v/extensions/AMD/SPV_AMD_gpu_shader_int16.html[+SPV_AMD_gpu_shader_int16+]
https://www.khronos.org/registry/spir-v/extensions/AMD/SPV_AMD_gpu_shader_int16.html[`SPV_AMD_gpu_shader_int16`]
SPIR-V extension.
*Contributors*::
- Daniel Rakos, AMD
@ -18,7 +18,7 @@ include::meta/VK_AMD_gpu_shader_int16.txt[]
This extension adds support for the following SPIR-V extension in Vulkan:
* +SPV_AMD_gpu_shader_int16+
* `SPV_AMD_gpu_shader_int16`
=== Version History

View File

@ -14,7 +14,7 @@ include::meta/VK_AMD_shader_ballot.txt[]
This extension adds support for the following SPIR-V extension in Vulkan:
* https://www.khronos.org/registry/spir-v/extensions/AMD/SPV_AMD_shader_ballot.html[+SPV_AMD_shader_ballot+]
* https://www.khronos.org/registry/spir-v/extensions/AMD/SPV_AMD_shader_ballot.html[`SPV_AMD_shader_ballot`]
ifdef::editing-notes[]
[NOTE]

View File

@ -9,7 +9,7 @@ include::meta/VK_AMD_shader_core_properties.txt[]
- Matthaeus Chajdas, AMD
This extension exposes shader core properties for a target physical device
through the VK_KHR_get_physical_device_properties2 extension.
through the `<<VK_KHR_get_physical_device_properties2>>` extension.
Please refer to the example below for proper usage.
=== New Object Types

View File

@ -13,7 +13,7 @@ include::meta/VK_AMD_shader_explicit_vertex_parameter.txt[]
This extension adds support for the following SPIR-V extension in Vulkan:
* https://www.khronos.org/registry/spir-v/extensions/AMD/SPV_AMD_shader_explicit_vertex_parameter.html[+SPV_AMD_shader_explicit_vertex_parameter+]
* https://www.khronos.org/registry/spir-v/extensions/AMD/SPV_AMD_shader_explicit_vertex_parameter.html[`SPV_AMD_shader_explicit_vertex_parameter`]
ifdef::editing-notes[]
[NOTE]

View File

@ -6,7 +6,7 @@ include::meta/VK_AMD_shader_fragment_mask.txt[]
No known IP claims.
*Dependencies*::
- Requires the
https://www.khronos.org/registry/spir-v/extensions/AMD/SPV_AMD_shader_fragment_mask.html[+SPV_AMD_shader_fragment_mask+]
https://www.khronos.org/registry/spir-v/extensions/AMD/SPV_AMD_shader_fragment_mask.html[`SPV_AMD_shader_fragment_mask`]
SPIR-V extension.
*Contributors*::
- Aaron Hagan, AMD

View File

@ -4,10 +4,10 @@ include::meta/VK_AMD_shader_image_load_store_lod.txt[]
2017-08-21
*Interactions and External Dependencies*::
- This extension requires the
https://www.khronos.org/registry/spir-v/extensions/AMD/SPV_AMD_shader_image_load_store_lod.html[+SPV_AMD_shader_image_load_store_lod+]
https://www.khronos.org/registry/spir-v/extensions/AMD/SPV_AMD_shader_image_load_store_lod.html[`SPV_AMD_shader_image_load_store_lod`]
SPIR-V extension.
- This extension requires
https://www.khronos.org/registry/OpenGL/extensions/AMD/AMD_shader_image_load_store_lod.txt[+GL_AMD_shader_image_load_store_lod+]
https://www.khronos.org/registry/OpenGL/extensions/AMD/AMD_shader_image_load_store_lod.txt[`GL_AMD_shader_image_load_store_lod`]
for GLSL-based source languages.
*IP Status*::
No known IP claims.
@ -18,7 +18,7 @@ include::meta/VK_AMD_shader_image_load_store_lod.txt[]
This extension adds support for the following SPIR-V extension in Vulkan:
* https://www.khronos.org/registry/spir-v/extensions/AMD/SPV_AMD_shader_image_load_store_lod.html[+SPV_AMD_shader_image_load_store_lod+]
* https://www.khronos.org/registry/spir-v/extensions/AMD/SPV_AMD_shader_image_load_store_lod.html[`SPV_AMD_shader_image_load_store_lod`]
=== Version History

View File

@ -13,7 +13,7 @@ include::meta/VK_AMD_shader_trinary_minmax.txt[]
This extension adds support for the following SPIR-V extension in Vulkan:
* https://www.khronos.org/registry/spir-v/extensions/AMD/SPV_AMD_shader_trinary_minmax.html[+SPV_AMD_shader_trinary_minmax+]
* https://www.khronos.org/registry/spir-v/extensions/AMD/SPV_AMD_shader_trinary_minmax.html[`SPV_AMD_shader_trinary_minmax`]
ifdef::editing-notes[]
[NOTE]

View File

@ -6,7 +6,7 @@ include::meta/VK_AMD_texture_gather_bias_lod.txt[]
No known IP claims.
*Interactions and External Dependencies*::
- Requires the
https://www.khronos.org/registry/spir-v/extensions/AMD/SPV_AMD_texture_gather_bias_lod.html[+SPV_AMD_texture_gather_bias_lod+]
https://www.khronos.org/registry/spir-v/extensions/AMD/SPV_AMD_texture_gather_bias_lod.html[`SPV_AMD_texture_gather_bias_lod`]
SPIR-V extension.
*Contributors*::
- Dominik Witczak, AMD
@ -21,7 +21,7 @@ This extension adds two related features.
Firstly, support for the following SPIR-V extension in Vulkan is added:
* +SPV_AMD_texture_gather_bias_lod+
* `SPV_AMD_texture_gather_bias_lod`
Secondly, the extension allows the application to query which formats can be
used together with the new function prototypes introduced by the SPIR-V

View File

@ -14,16 +14,16 @@ include::meta/VK_ANDROID_external_memory_android_hardware_buffer.txt[]
- Matthew Netsch, Qualcomm
- Andrew Garrard, Samsung
This extension enables an application to import Android code:AHardwareBuffer
objects created outside of the Vulkan device into Vulkan memory objects,
where they can: be bound to images and buffers.
It also allows exporting an code:AHardwareBuffer from a Vulkan memory object
for symmetry with other operating systems.
But since not all code:AHardwareBuffer usages and formats have Vulkan
This extension enables an application to import Android
dlink:AHardwareBuffer objects created outside of the Vulkan device into
Vulkan memory objects, where they can: be bound to images and buffers.
It also allows exporting an dlink:AHardwareBuffer from a Vulkan memory
object for symmetry with other operating systems.
But since not all dlink:AHardwareBuffer usages and formats have Vulkan
equivalents, exporting from Vulkan provides strictly less functionality than
creating the code:AHardwareBuffer externally and importing it.
creating the dlink:AHardwareBuffer externally and importing it.
Some code:AHardwareBuffer images have implementation-defined _external
Some dlink:AHardwareBuffer images have implementation-defined _external
formats_ that may: not correspond to Vulkan formats.
Sampler Y'C~b~C~r~ conversion can: be used to sample from these images and
convert them to a known color space.
@ -68,7 +68,7 @@ None.
1) Other external memory objects are represented as weakly-typed handles
(e.g. Win32 code:HANDLE or POSIX file descriptor), and require a handle type
parameter along with handles.
code:AHardwareBuffer is strongly typed, so naming the handle type is
dlink:AHardwareBuffer is strongly typed, so naming the handle type is
redundant.
Does symmetry justify adding handle type parameters/fields anyway?
@ -77,10 +77,10 @@ The handle type is already provided in places that treat external memory
objects generically.
In the places we would add it, the application code that would have to
provide the handle type value is already dealing with
code:AHardwareBuffer-specific commands/structures; the extra symmetry would
dlink:AHardwareBuffer-specific commands/structures; the extra symmetry would
not be enough to make that code generic.
2) The internal layout and therefore size of a code:AHardwareBuffer image
2) The internal layout and therefore size of a dlink:AHardwareBuffer image
may depend on native usage flags that do not have corresponding Vulkan
counterparts.
Do we provide this info to flink:vkCreateImage somehow, or allow the
@ -90,7 +90,7 @@ approximate?
*RESOLVED*: Allow the allocation size to be unspecified when allocating the
memory.
It has to work this way for exported image memory anyway, since
code:AHardwareBuffer allocation happens in flink:vkAllocateMemory, and
dlink:AHardwareBuffer allocation happens in flink:vkAllocateMemory, and
internally is performed by a separate HAL, not the Vulkan implementation
itself.
There is a similar issue with flink:vkGetImageSubresourceLayout: the layout
@ -114,7 +114,7 @@ Implementations are encouraged to minimize differences as much as possible
without causing compatibility problems for existing OpenGL ES applications
or violating Vulkan requirements.
4) Should an code:AHardwareBuffer with code:AHARDWAREBUFFER_USAGE_CPU_*
4) Should an dlink:AHardwareBuffer with code:AHARDWAREBUFFER_USAGE_CPU_*
usage be mappable in Vulkan? Should it be possible to export an
code:AHardwareBuffers with such usage?
@ -132,11 +132,11 @@ view of the data and does not imply ownership (this means implementations
must not internally call code:AHardwareBuffer_lock to implement
flink:vkMapMemory, or assume the application has done so).
Implementations are not required to support linear-tiled images backed by
Android hardware buffers, even if the code:AHardwareBuffer has CPU usage.
Android hardware buffers, even if the dlink:AHardwareBuffer has CPU usage.
There is no reliable way to allocate memory in Vulkan that can be exported
to a code:AHardwareBuffer with CPU usage.
to a dlink:AHardwareBuffer with CPU usage.
5) Android may add new code:AHardwareBuffer formats and usage flags over
5) Android may add new dlink:AHardwareBuffer formats and usage flags over
time.
Can reference to them be added to this extension, or do they need a new
extension?
@ -147,9 +147,9 @@ No new Vulkan features or implementation requirements can be added.
The extension version number will be incremented when this additional
documentation is added, but the version number does not indicate that an
implementaiton supports Vulkan memory or resources that map to the new
code:AHardwareBuffer features: support for that must be queried with
dlink:AHardwareBuffer features: support for that must be queried with
flink:vkGetPhysicalDeviceImageFormatProperties2 or is implied by
successfully allocating a code:AHardwareBuffer outside of Vulkan that uses
successfully allocating a dlink:AHardwareBuffer outside of Vulkan that uses
the new feature and has a GPU usage flag.
In essence, these are new features added to a new Android API level, rather

View File

@ -77,7 +77,8 @@ None.
=== Example
Create an image view that decodes to VK_FORMAT_R8G8B8A8_UNORM precision:
Create an image view that decodes to ename:VK_FORMAT_R8G8B8A8_UNORM
precision:
[source,c++]
----------------------------------------

View File

@ -14,9 +14,9 @@ include::meta/VK_EXT_buffer_device_address.txt[]
This extension allows the application to query a 64-bit buffer device
address value for a buffer, which can be used to access the buffer memory
via the code:PhysicalStorageBufferEXT storage class in the
https://github.com/KhronosGroup/GLSL/blob/master/extensions/ext/GL_EXT_buffer_reference.txt[+GL_EXT_buffer_reference+]
https://github.com/KhronosGroup/GLSL/blob/master/extensions/ext/GLSL_EXT_buffer_reference.txt[`GL_EXT_buffer_reference`]
GLSL extension and
http://htmlpreview.github.io/?https://github.com/KhronosGroup/SPIRV-Registry/blob/master/extensions/EXT/SPV_EXT_physical_storage_buffer.html[+SPV_EXT_physical_storage_buffer+]
http://htmlpreview.github.io/?https://github.com/KhronosGroup/SPIRV-Registry/blob/master/extensions/EXT/SPV_EXT_physical_storage_buffer.html[`SPV_EXT_physical_storage_buffer`]
SPIR-V extension.
It also allows buffer device addresses to be provided by a trace replay

View File

@ -17,7 +17,7 @@ their resources, and selecting amongst those resources with dynamic
There are feature enables and SPIR-V capabilities for non-uniform descriptor
indexing in the shader, and non-uniform indexing in the shader requires use
of a new code:NonUniformEXT decoration defined in the
+SPV_EXT_descriptor_indexing+ SPIR-V extension.
`SPV_EXT_descriptor_indexing` SPIR-V extension.
There are descriptor set layout binding creation flags enabling several
features:
@ -33,7 +33,7 @@ features:
submission is executing.
* The final binding in a descriptor set layout can have a variable size
(and unsized arrays of resources are allowed in the
+GL_EXT_nonuniform_qualifier+ and +SPV_EXT_descriptor_indexing+
`GL_EXT_nonuniform_qualifier` and `SPV_EXT_descriptor_indexing`
extensions).
Note that it is valid for multiple descriptor arrays in a shader to use the

View File

@ -28,16 +28,16 @@ create slink:VkBuffer objects that can: be bound to that memory.
produced image, specify the memory layout (such as row pitch and DRM
format modifier) of the slink:VkImage? In other words, how does the
application achieve behavior comparable to that provided by
https://www.khronos.org/registry/EGL/extensions/EXT/EGL_EXT_image_dma_buf_import.txt[EGL_EXT_image_dma_buf_import]
https://www.khronos.org/registry/EGL/extensions/EXT/EGL_EXT_image_dma_buf_import.txt[`EGL_EXT_image_dma_buf_import`]
and
https://www.khronos.org/registry/EGL/extensions/EXT/EGL_EXT_image_dma_buf_import_modifiers.txt[EGL_EXT_image_dma_buf_import_modifiers]?
https://www.khronos.org/registry/EGL/extensions/EXT/EGL_EXT_image_dma_buf_import_modifiers.txt[`EGL_EXT_image_dma_buf_import_modifiers`]?
+
--
*RESOLVED*.
Features comparable to those in
https://www.khronos.org/registry/EGL/extensions/EXT/EGL_EXT_image_dma_buf_import.txt[EGL_EXT_image_dma_buf_import]
https://www.khronos.org/registry/EGL/extensions/EXT/EGL_EXT_image_dma_buf_import.txt[`EGL_EXT_image_dma_buf_import`]
and
https://www.khronos.org/registry/EGL/extensions/EXT/EGL_EXT_image_dma_buf_import_modifiers.txt[EGL_EXT_image_dma_buf_import_modifiers]
https://www.khronos.org/registry/EGL/extensions/EXT/EGL_EXT_image_dma_buf_import_modifiers.txt[`EGL_EXT_image_dma_buf_import_modifiers`]
will be provided by an extension layered atop this one.
--

View File

@ -4,7 +4,7 @@ include::meta/VK_EXT_fragment_density_map.txt[]
2018-09-25
*Interactions and External Dependencies*::
- This extension requires the
https://www.khronos.org/registry/spir-v/extensions/EXT/SPV_EXT_fragment_invocation_density.html[+SPV_EXT_fragment_invocation_density+]
https://www.khronos.org/registry/spir-v/extensions/EXT/SPV_EXT_fragment_invocation_density.html[`SPV_EXT_fragment_invocation_density`]
SPIR-V extension.
*Contributors*::
- Matthew Netsch, Qualcomm Technologies, Inc.

View File

@ -309,7 +309,7 @@ Beginning in Linux 4.10, the kernel requires that the application provide
the same DRM format _modifier_ for each plane.
(See Linux commit
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=bae781b259269590109e8a4a8227331362b88212[bae781b259269590109e8a4a8227331362b88212]).
And GBM provides an entrypoint, ftext:gbm_bo_get_modifier, for querying the
And GBM provides an entrypoint, code:gbm_bo_get_modifier, for querying the
_modifier_ of the image but does not provide one to query the modifier of
individual planes.
--
@ -443,16 +443,16 @@ _requires_ the application to set pname:size to 0.
==== References
. [[VK_EXT_image_drm_format_modifier-fn1]]
https://www.khronos.org/registry/EGL/extensions/EXT/EGL_EXT_image_dma_buf_import.txt[EGL_EXT_image_dma_buf_import]
https://www.khronos.org/registry/EGL/extensions/EXT/EGL_EXT_image_dma_buf_import.txt[`EGL_EXT_image_dma_buf_import`]
. [[VK_EXT_image_drm_format_modifier-fn2]]
https://www.khronos.org/registry/EGL/extensions/EXT/EGL_EXT_image_dma_buf_import_modifiers.txt[EGL_EXT_image_dma_buf_import_modifiers]
https://www.khronos.org/registry/EGL/extensions/EXT/EGL_EXT_image_dma_buf_import_modifiers.txt[`EGL_EXT_image_dma_buf_import_modifiers`]
. [[VK_EXT_image_drm_format_modifier-fn3]]
https://www.khronos.org/registry/EGL/extensions/MESA/EGL_MESA_image_dma_buf_export.txt[EGL_MESA_image_dma_buf_export]
https://www.khronos.org/registry/EGL/extensions/MESA/EGL_MESA_image_dma_buf_export.txt[`EGL_MESA_image_dma_buf_export`]
. [[VK_EXT_image_drm_format_modifier-fn4]]
https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/include/uapi/drm/drm_mode.h?id=refs/tags/v4.10#n392[struct
drm_mode_fb_cmd2]
https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/include/uapi/drm/drm_mode.h?id=refs/tags/v4.10#n392[`struct
drm_mode_fb_cmd2`]
. [[VK_EXT_image_drm_format_modifier-fn5]]
https://cgit.freedesktop.org/mesa/mesa/tree/src/gbm/main/gbm.h?id=refs/tags/mesa-18.0.0-rc1[gbm.h]
https://cgit.freedesktop.org/mesa/mesa/tree/src/gbm/main/gbm.h?id=refs/tags/mesa-18.0.0-rc1[`gbm.h`]
==== Version History

View File

@ -4,19 +4,19 @@ include::meta/VK_EXT_post_depth_coverage.txt[]
2017-07-17
*Interactions and External Dependencies*::
- This extension requires the
https://www.khronos.org/registry/spir-v/extensions/KHR/SPV_KHR_post_depth_coverage.html[+SPV_KHR_post_depth_coverage+]
https://www.khronos.org/registry/spir-v/extensions/KHR/SPV_KHR_post_depth_coverage.html[`SPV_KHR_post_depth_coverage`]
SPIR-V extension.
- This extension requires
https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_post_depth_coverage.txt[+GL_ARB_post_depth_coverage+]
https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_post_depth_coverage.txt[`GL_ARB_post_depth_coverage`]
or
https://www.khronos.org/registry/OpenGL/extensions/EXT/EXT_post_depth_coverage.txt[+GL_EXT_post_depth_coverage+]
https://www.khronos.org/registry/OpenGL/extensions/EXT/EXT_post_depth_coverage.txt[`GL_EXT_post_depth_coverage`]
for GLSL-based source languages.
*Contributors*::
- Jeff Bolz, NVIDIA
This extension adds support for the following SPIR-V extension in Vulkan:
* +SPV_KHR_post_depth_coverage+
* `SPV_KHR_post_depth_coverage`
which allows the fragment shader to control whether values in the
code:SampleMask built-in input variable reflect the coverage after the

View File

@ -6,7 +6,7 @@ include::meta/VK_EXT_shader_stencil_export.txt[]
No known IP claims.
*Interactions and External Dependencies*::
- Requires the
https://www.khronos.org/registry/spir-v/extensions/EXT/SPV_EXT_shader_stencil_export.html[+SPV_EXT_shader_stencil_export+]
https://www.khronos.org/registry/spir-v/extensions/EXT/SPV_EXT_shader_stencil_export.html[`SPV_EXT_shader_stencil_export`]
SPIR-V extension.
*Contributors*::
- Dominik Witczak, AMD
@ -14,7 +14,7 @@ include::meta/VK_EXT_shader_stencil_export.txt[]
- Rex Xu, AMD
This extension adds support for the SPIR-V extension
+SPV_EXT_shader_stencil_export+, providing a mechanism whereby a shader may
`SPV_EXT_shader_stencil_export`, providing a mechanism whereby a shader may
generate the stencil reference value per invocation.
When stencil testing is enabled, this allows the test to be performed
against the value generated in the shader.

View File

@ -6,10 +6,10 @@ include::meta/VK_EXT_shader_subgroup_ballot.txt[]
No known IP claims.
*Interactions and External Dependencies*::
- This extension requires the
https://www.khronos.org/registry/spir-v/extensions/KHR/SPV_KHR_shader_ballot.html[+SPV_KHR_shader_ballot+]
https://www.khronos.org/registry/spir-v/extensions/KHR/SPV_KHR_shader_ballot.html[`SPV_KHR_shader_ballot`]
SPIR-V extension.
- This extension requires the
https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_shader_ballot.txt[+GL_ARB_shader_ballot+]
https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_shader_ballot.txt[`GL_ARB_shader_ballot`]
extension for GLSL source languages.
*Contributors*::
- Jeff Bolz, NVIDIA
@ -18,7 +18,7 @@ include::meta/VK_EXT_shader_subgroup_ballot.txt[]
This extension adds support for the following SPIR-V extension in Vulkan:
* +SPV_KHR_shader_ballot+
* `SPV_KHR_shader_ballot`
This extension provides the ability for a group of invocations, which
execute in parallel, to do limited forms of cross-invocation communication

View File

@ -6,10 +6,10 @@ include::meta/VK_EXT_shader_subgroup_vote.txt[]
No known IP claims.
*Interactions and External Dependencies*::
- This extension requires the
https://www.khronos.org/registry/spir-v/extensions/KHR/SPV_KHR_subgroup_vote.html[+SPV_KHR_subgroup_vote+]
https://www.khronos.org/registry/spir-v/extensions/KHR/SPV_KHR_subgroup_vote.html[`SPV_KHR_subgroup_vote`]
SPIR-V extension.
- This extension requires the
https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_shader_group_vote.txt[+GL_ARB_shader_group_vote+]
https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_shader_group_vote.txt[`GL_ARB_shader_group_vote`]
extension for GLSL source languages.
*Contributors*::
- Neil Henning, Codeplay
@ -17,7 +17,7 @@ include::meta/VK_EXT_shader_subgroup_vote.txt[]
This extension adds support for the following SPIR-V extension in Vulkan:
* +SPV_KHR_subgroup_vote+
* `SPV_KHR_subgroup_vote`
This extension provides new SPIR-V instructions:

View File

@ -4,14 +4,14 @@ include::meta/VK_EXT_shader_viewport_index_layer.txt[]
2017-08-08
*Interactions and External Dependencies*::
- This extension requires the
https://www.khronos.org/registry/spir-v/extensions/EXT/SPV_EXT_shader_viewport_index_layer.html[+SPV_EXT_shader_viewport_index_layer+]
https://www.khronos.org/registry/spir-v/extensions/EXT/SPV_EXT_shader_viewport_index_layer.html[`SPV_EXT_shader_viewport_index_layer`]
SPIR-V extension.
- This extension requires the
https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_shader_viewport_layer_array.txt[+GL_ARB_shader_viewport_layer_array+],
https://www.khronos.org/registry/OpenGL/extensions/AMD/AMD_vertex_shader_layer.txt[+GL_AMD_vertex_shader_layer+],
https://www.khronos.org/registry/OpenGL/extensions/AMD/AMD_vertex_shader_viewport_index.txt[+GL_AMD_vertex_shader_viewport_index+],
https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_shader_viewport_layer_array.txt[`GL_ARB_shader_viewport_layer_array`],
https://www.khronos.org/registry/OpenGL/extensions/AMD/AMD_vertex_shader_layer.txt[`GL_AMD_vertex_shader_layer`],
https://www.khronos.org/registry/OpenGL/extensions/AMD/AMD_vertex_shader_viewport_index.txt[`GL_AMD_vertex_shader_viewport_index`],
or
https://www.khronos.org/registry/OpenGL/extensions/NV/NV_viewport_array2.txt[+GL_NV_viewport_array2+]
https://www.khronos.org/registry/OpenGL/extensions/NV/NV_viewport_array2.txt[`GL_NV_viewport_array2`]
extensions for GLSL source languages.
- This extension requires the pname:multiViewport feature.
- This extension interacts with the pname:tessellationShader feature.
@ -23,7 +23,7 @@ include::meta/VK_EXT_shader_viewport_index_layer.txt[]
- Slawomir Grajeswki, Intel
This extension adds support for the code:ShaderViewportIndexLayerEXT
capability from the +SPV_EXT_shader_viewport_index_layer+ extension in
capability from the `SPV_EXT_shader_viewport_index_layer` extension in
Vulkan.
This extension allows variables decorated with the code:Layer and
@ -34,9 +34,9 @@ When using GLSL source-based shading languages, the code:gl_ViewportIndex
and code:gl_Layer built-in variables map to the SPIR-V code:ViewportIndex
and code:Layer built-in decorations, respectively.
Behaviour of these variables is extended as described in the
+GL_ARB_shader_viewport_layer_array+ (or the precursor
+GL_AMD_vertex_shader_layer+, +GL_AMD_vertex_shader_viewport_index+, and
+GL_NV_viewport_array2 extensions+).
`GL_ARB_shader_viewport_layer_array` (or the precursor
`GL_AMD_vertex_shader_layer`, `GL_AMD_vertex_shader_viewport_index`, and
`GL_NV_viewport_array2` extensions).
ifdef::VK_NV_viewport_array2[]
[NOTE]

View File

@ -6,7 +6,7 @@ include::meta/VK_GOOGLE_decorate_string.txt[]
No known IP claims.
*Interactions and External Dependencies*::
- Requires the
https://github.com/KhronosGroup/SPIRV-Registry/blob/master/extensions/GOOGLE/SPV_GOOGLE_decorate_string.asciidoc[+SPV_GOOGLE_decorate_string+]
https://github.com/KhronosGroup/SPIRV-Registry/blob/master/extensions/GOOGLE/SPV_GOOGLE_decorate_string.asciidoc[`SPV_GOOGLE_decorate_string`]
SPIR-V extension.
*Contributors*::
- Hai Nguyen, Google

View File

@ -6,7 +6,7 @@ include::meta/VK_GOOGLE_hlsl_functionality1.txt[]
No known IP claims.
*Interactions and External Dependencies*::
- Requires the
https://github.com/KhronosGroup/SPIRV-Registry/blob/master/extensions/GOOGLE/SPV_GOOGLE_hlsl_functionality1.asciidoc[+SPV_GOOGLE_hlsl_functionality1+]
https://github.com/KhronosGroup/SPIRV-Registry/blob/master/extensions/GOOGLE/SPV_GOOGLE_hlsl_functionality1.asciidoc[`SPV_GOOGLE_hlsl_functionality1`]
SPIR-V extension.
*Contributors*::
- Hai Nguyen, Google

View File

@ -10,7 +10,7 @@ include::meta/VK_KHR_16bit_storage.txt[]
No known IP claims.
*Interactions and External Dependencies*::
- This extension requires
https://www.khronos.org/registry/spir-v/extensions/KHR/SPV_KHR_16bit_storage.html[+SPV_KHR_16bit_storage+]
https://www.khronos.org/registry/spir-v/extensions/KHR/SPV_KHR_16bit_storage.html[`SPV_KHR_16bit_storage`]
- Promoted to Vulkan 1.1 Core
*Contributors*::
- Alexander Galazin, ARM

View File

@ -10,7 +10,7 @@ include::meta/VK_KHR_8bit_storage.txt[]
No known IP claims.
*Interactions and External Dependencies*::
- This extension requires
https://www.khronos.org/registry/spir-v/extensions/KHR/SPV_KHR_8bit_storage.html[+SPV_KHR_8bit_storage+]
https://www.khronos.org/registry/spir-v/extensions/KHR/SPV_KHR_8bit_storage.html[`SPV_KHR_8bit_storage`]
*Contributors*::
- Alexander Galazin, Arm

View File

@ -28,10 +28,10 @@ include::meta/VK_KHR_android_surface.txt[]
The `VK_KHR_android_surface` extension is an instance extension.
It provides a mechanism to create a slink:VkSurfaceKHR object (defined by
the `<<VK_KHR_surface>>` extension) that refers to an code:ANativeWindow,
the `<<VK_KHR_surface>>` extension) that refers to an dlink:ANativeWindow,
Android's native surface type.
The code:ANativeWindow represents the producer endpoint of any buffer queue,
regardless of consumer endpoint.
The dlink:ANativeWindow represents the producer endpoint of any buffer
queue, regardless of consumer endpoint.
Common consumer endpoints for code:ANativeWindows are the system window
compositor, video encoders, and application-specific compositors importing
the images through a code:SurfaceTexture.

View File

@ -1,4 +1,4 @@
// Copyright (c) 2016-2017 Khronos Group. This work is licensed under a
// Copyright (c) 2016-2019 Khronos Group. This work is licensed under a
// Creative Commons Attribution 4.0 International License; see
// http://creativecommons.org/licenses/by/4.0/

View File

@ -1,4 +1,4 @@
// Copyright (c) 2016-2017 Khronos Group. This work is licensed under a
// Copyright (c) 2016-2019 Khronos Group. This work is licensed under a
// Creative Commons Attribution 4.0 International License; see
// http://creativecommons.org/licenses/by/4.0/

View File

@ -55,24 +55,25 @@ None.
1) What should this extension be named?
*RESOLVED*: VK_KHR_get_display_properties2.
*RESOLVED*: `VK_KHR_get_display_properties2`.
Other alternatives:
* VK_KHR_display2
* One extension, combined with VK_KHR_surface_capabilites2.
* `VK_KHR_display2`
* One extension, combined with `VK_KHR_surface_capabilites2`.
2) Should extensible input structs be added for these new functions:
*RESOLVED*:
* flink:vkGetPhysicalDeviceDisplayProperties2KHR: No.
The only current input is a VkPhysicalDevice.
The only current input is a slink:VkPhysicalDevice.
Other inputs wouldn't make sense.
* flink:vkGetPhysicalDeviceDisplayPlaneProperties2KHR: No.
The only current input is a VkPhysicalDevice.
The only current input is a slink:VkPhysicalDevice.
Other inputs wouldn't make sense.
* flink:vkGetDisplayModeProperties2KHR: No.
The only curent inputs are a VkPhysicalDevice and a VkDisplayModeKHR.
The only current inputs are a slink:VkPhysicalDevice and a
slink:VkDisplayModeKHR.
Other inputs wouldn't make sense.
3) Should additional display query functions be extended?

View File

@ -27,7 +27,7 @@ small portion of the presentable images within a swapchain, since it enables
the presentation engine to avoid wasting time presenting parts of the
surface that haven't changed.
This extension is leveraged from the +EGL_KHR_swap_buffers_with_damage+
This extension is leveraged from the `EGL_KHR_swap_buffers_with_damage`
extension.
=== New Object Types

View File

@ -13,7 +13,7 @@ include::meta/VK_KHR_multiview.txt[]
*Contributors*::
- Jeff Bolz, NVIDIA
This extension has the same goal as the OpenGL ES +GL_OVR_multiview+
This extension has the same goal as the OpenGL ES `GL_OVR_multiview`
extension - it enables rendering to multiple "`views`" by recording a single
set of commands to be executed with slightly different behavior for each
view.

View File

@ -8,9 +8,9 @@ include::meta/VK_KHR_shader_atomic_int64.txt[]
2018-07-05
*Interactions and External Dependencies*::
- This extension requires the
https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_gpu_shader_int64.txt[+GL_ARB_gpu_shader_int64+]
https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_gpu_shader_int64.txt[`GL_ARB_gpu_shader_int64`]
and
https://github.com/KhronosGroup/GLSL/tree/master/extensions/ext/GL_EXT_shader_atomic_int64.txt[+GL_EXT_shader_atomic_int64+]
https://github.com/KhronosGroup/GLSL/tree/master/extensions/ext/GL_EXT_shader_atomic_int64.txt[`GL_EXT_shader_atomic_int64`]
extensions for GLSL source languages.
*Contributors*::
- Aaron Hagan, AMD

View File

@ -10,10 +10,10 @@ include::meta/VK_KHR_shader_draw_parameters.txt[]
No known IP claims.
*Interactions and External Dependencies*::
- Requires the
https://www.khronos.org/registry/spir-v/extensions/KHR/SPV_KHR_shader_draw_parameters.html[+SPV_KHR_shader_draw_parameters+]
https://www.khronos.org/registry/spir-v/extensions/KHR/SPV_KHR_shader_draw_parameters.html[`SPV_KHR_shader_draw_parameters`]
SPIR-V extension.
- Requires
https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_shader_draw_parameters.txt[+GL_ARB_shader_draw_parameters+]
https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_shader_draw_parameters.txt[`GL_ARB_shader_draw_parameters`]
for GLSL source languages.
- Promoted to Vulkan 1.1 Core
*Contributors*::
@ -26,7 +26,7 @@ include::meta/VK_KHR_shader_draw_parameters.txt[]
This extension adds support for the following SPIR-V extension in Vulkan:
* +SPV_KHR_shader_draw_parameters+
* `SPV_KHR_shader_draw_parameters`
The extension provides access to three additional built-in shader variables
in Vulkan:
@ -39,7 +39,7 @@ in Vulkan:
being processed from an indirect draw call.
When using GLSL source-based shader languages, the following variables from
+GL_ARB_shader_draw_parameters+ can map to these SPIR-V built-in
`GL_ARB_shader_draw_parameters` can map to these SPIR-V built-in
decorations:
* `in int gl_BaseInstanceARB;` -> code:BaseInstance,
@ -84,12 +84,12 @@ distinguish whether it's actually available or not.
=== Issues
1) Is this the same functionality as +GL_ARB_shader_draw_parameters+?
1) Is this the same functionality as `GL_ARB_shader_draw_parameters`?
*RESOLVED*: It's actually a superset as it also adds in support for arrayed
drawing commands.
In GL for +GL_ARB_shader_draw_parameters+, code:gl_BaseVertexARB holds the
In GL for `GL_ARB_shader_draw_parameters`, code:gl_BaseVertexARB holds the
integer value passed to the parameter to the command that resulted in the
current shader invocation.
In the case where the command has no code:baseVertex parameter, the value of

View File

@ -10,7 +10,7 @@ include::meta/VK_KHR_storage_buffer_storage_class.txt[]
No known IP claims.
*Interactions and External Dependencies*::
- This extension requires the
https://www.khronos.org/registry/spir-v/extensions/KHR/SPV_KHR_storage_buffer_storage_class.html[+SPV_KHR_storage_buffer_storage_class+]
https://www.khronos.org/registry/spir-v/extensions/KHR/SPV_KHR_storage_buffer_storage_class.html[`SPV_KHR_storage_buffer_storage_class`]
SPIR-V extension.
- Promoted to Vulkan 1.1 Core
*Contributors*::
@ -19,7 +19,7 @@ include::meta/VK_KHR_storage_buffer_storage_class.txt[]
This extension adds support for the following SPIR-V extension in Vulkan:
* +SPV_KHR_storage_buffer_storage_class+
* `SPV_KHR_storage_buffer_storage_class`
This extension provides a new SPIR-V code:StorageBuffer storage class.
A code:Block-decorated object in this class is equivalent to a

View File

@ -10,7 +10,7 @@ include::meta/VK_KHR_variable_pointers.txt[]
No known IP claims.
*Interactions and External Dependencies*::
- Requires the
https://www.khronos.org/registry/spir-v/extensions/KHR/SPV_KHR_variable_pointers.html[+SPV_KHR_variable_pointers+]
https://www.khronos.org/registry/spir-v/extensions/KHR/SPV_KHR_variable_pointers.html[`SPV_KHR_variable_pointers`]
SPIR-V extension.
- Promoted to Vulkan 1.1 Core
*Contributors*::
@ -25,12 +25,12 @@ include::meta/VK_KHR_variable_pointers.txt[]
- Jesse Hall, Google
The `VK_KHR_variable_pointers` extension allows implementations to indicate
their level of support for the +SPV_KHR_variable_pointers+ SPIR-V extension.
their level of support for the `SPV_KHR_variable_pointers` SPIR-V extension.
The SPIR-V extension allows shader modules to use invocation-private
pointers into uniform and/or storage buffers, where the pointer values can
be dynamic and non-uniform.
The +SPV_KHR_variable_pointers+ extension introduces two capabilities.
The `SPV_KHR_variable_pointers` extension introduces two capabilities.
The first, code:VariablePointersStorageBuffer, must: be supported by all
implementations of this extension.
The second, code:VariablePointers, is optional.

13
appendices/VK_KHR_vulkan_memory_model.txt Normal file → Executable file
View File

@ -5,12 +5,12 @@
include::meta/VK_KHR_vulkan_memory_model.txt[]
*Last Modified Date*::
2018-02-05
2018-12-10
*IP Status*::
No known IP claims.
*Interactions and External Dependencies*::
- This extension requires
https://www.khronos.org/registry/spir-v/extensions/KHR/SPV_KHR_vulkan_memory_model.html[+SPV_KHR_vulkan_memory_model+]
https://www.khronos.org/registry/spir-v/extensions/KHR/SPV_KHR_vulkan_memory_model.html[`SPV_KHR_vulkan_memory_model`]
*Contributors*::
- Jeff Bolz, NVIDIA
- Alan Baker, Google
@ -33,6 +33,15 @@ multiple shader invocations.
* slink:VkPhysicalDeviceVulkanMemoryModelFeaturesKHR
[NOTE]
.Note
====
Version 3 of the spec added a member
(pname:vulkanMemoryModelAvailabilityVisibilityChains) to
slink:VkPhysicalDeviceVulkanMemoryModelFeaturesKHR, which is an incompatible
change from version 2.
====
=== New SPIR-V Capabilities
* <<spirvenv-capabilities-table-memorymodel,code:VulkanMemoryModelKHR>>

View File

@ -288,7 +288,7 @@ The inputs are "`referenced`", and should not be modified after the call to
flink:vkCmdProcessCommandsNVX and until after the rendering of the target
command buffer is finished.
18) Why is this +NVX+ and not +NV+?
18) Why is this `NVX` and not `NV`?
To allow early experimentation and feedback.
We expect that a version with a refined design as multi-vendor variant will

View File

@ -6,9 +6,9 @@ include::meta/VK_NVX_multiview_per_view_attributes.txt[]
No known IP claims.
*Interactions and External Dependencies*::
- This extension requires the
https://www.khronos.org/registry/spir-v/extensions/NV/SPV_NVX_multiview_per_view_attributes.html[+SPV_NVX_multiview_per_view_attributes+]
https://www.khronos.org/registry/spir-v/extensions/NV/SPV_NVX_multiview_per_view_attributes.html[`SPV_NVX_multiview_per_view_attributes`]
SPIR-V extension.
- This extension requires the +GL_NVX_multiview_per_view_attributes+
- This extension requires the `GL_NVX_multiview_per_view_attributes`
extension for GLSL source languages.
- This extension interacts with `<<VK_NV_viewport_array2>>`.
*Contributors*::
@ -18,8 +18,8 @@ include::meta/VK_NVX_multiview_per_view_attributes.txt[]
This extension adds a new way to write shaders to be used with multiview
subpasses, where the attributes for all views are written out by a single
invocation of the vertex processing stages.
Related SPIR-V and GLSL extensions +SPV_NVX_multiview_per_view_attributes+
and +GL_NVX_multiview_per_view_attributes+ introduce per-view position and
Related SPIR-V and GLSL extensions `SPV_NVX_multiview_per_view_attributes`
and `GL_NVX_multiview_per_view_attributes` introduce per-view position and
viewport mask attributes arrays, and this extension defines how those
per-view attribute arrays are interpreted by Vulkan.
Pipelines using per-view attributes may: only execute the vertex processing

View File

@ -14,7 +14,7 @@ include::meta/VK_NV_fragment_shader_barycentric.txt[]
This extension adds support for the following SPIR-V extension in Vulkan:
* +SPV_NV_fragment_shader_barycentric+
* `SPV_NV_fragment_shader_barycentric`
The extension provides access to three additional fragment shader variable
decorations in SPIR-V:
@ -31,7 +31,7 @@ decorations in SPIR-V:
the fragment produced using linear interpolation
When using GLSL source-based shader languages, the following variables from
+GL_NV_fragment_shader_barycentric+ maps to these SPIR-V built-in
`GL_NV_fragment_shader_barycentric` maps to these SPIR-V built-in
decorations:
* `in vec3 gl_BaryCoordNV;` -> code:BaryCoordNV

View File

@ -4,10 +4,10 @@ include::meta/VK_NV_geometry_shader_passthrough.txt[]
2017-02-15
*Interactions and External Dependencies*::
- This extension requires the
https://www.khronos.org/registry/spir-v/extensions/NV/SPV_NV_geometry_shader_passthrough.html[+SPV_NV_geometry_shader_passthrough+]
https://www.khronos.org/registry/spir-v/extensions/NV/SPV_NV_geometry_shader_passthrough.html[`SPV_NV_geometry_shader_passthrough`]
SPIR-V extension.
- This extension requires the
https://www.khronos.org/registry/OpenGL/extensions/NV/NV_geometry_shader_passthrough.txt[+GL_NV_geometry_shader_passthrough+]
https://www.khronos.org/registry/OpenGL/extensions/NV/NV_geometry_shader_passthrough.txt[`GL_NV_geometry_shader_passthrough`]
extension for GLSL source languages.
- This extension requires the pname:geometryShader feature.
*Contributors*::
@ -16,7 +16,7 @@ include::meta/VK_NV_geometry_shader_passthrough.txt[]
This extension adds support for the following SPIR-V extension in Vulkan:
* +SPV_NV_geometry_shader_passthrough+
* `SPV_NV_geometry_shader_passthrough`
Geometry shaders provide the ability for applications to process each
primitive sent through the graphics pipeline using a programmable shader.
@ -34,11 +34,11 @@ Adding this to a geometry shader input variable specifies that the values of
this input are copied to the corresponding vertex of the output primitive.
When using GLSL source-based shading languages, the code:passthrough layout
qualifier from +GL_NV_geometry_shader_passthrough+ maps to the
qualifier from `GL_NV_geometry_shader_passthrough` maps to the
code:PassthroughNV decoration.
To use the code:passthrough layout, in GLSL the
+GL_NV_geometry_shader_passthrough+ extension must be enabled.
Behaviour is described in the +GL_NV_geometry_shader_passthrough+ extension
`GL_NV_geometry_shader_passthrough` extension must be enabled.
Behaviour is described in the `GL_NV_geometry_shader_passthrough` extension
specification.
=== New Object Types

View File

@ -7,7 +7,7 @@ include::meta/VK_NV_glsl_shader.txt[]
*Contributors*::
- Piers Daniell, NVIDIA
This extension allows GLSL shaders written to the +GL_KHR_vulkan_glsl+
This extension allows GLSL shaders written to the `GL_KHR_vulkan_glsl`
extension specification to be used instead of SPIR-V.
The implementation will automatically detect whether the shader is SPIR-V or
GLSL, and compile it appropriately.

View File

@ -5,10 +5,10 @@ include::meta/VK_NV_ray_tracing.txt[]
*Interactions and External Dependencies*::
- This extension requires the
https://htmlpreview.github.io/?https://github.com/KhronosGroup/SPIRV-Registry/blob/master/extensions/NV/SPV_NV_ray_tracing.html[+SPV_NV_ray_tracing+]
https://htmlpreview.github.io/?https://github.com/KhronosGroup/SPIRV-Registry/blob/master/extensions/NV/SPV_NV_ray_tracing.html[`SPV_NV_ray_tracing`]
SPIR-V extension.
- This extension requires the
https://github.com/KhronosGroup/GLSL/blob/master/extensions/nv/GLSL_NV_ray_tracing.txt[+GL_NV_ray_tracing+]
https://github.com/KhronosGroup/GLSL/blob/master/extensions/nv/GLSL_NV_ray_tracing.txt[`GL_NV_ray_tracing`]
extension for GLSL source languages.
*Contributors*::

View File

@ -6,10 +6,10 @@ include::meta/VK_NV_sample_mask_override_coverage.txt[]
No known IP claims.
*Interactions and External Dependencies*::
- This extension requires the
https://www.khronos.org/registry/spir-v/extensions/NV/SPV_NV_sample_mask_override_coverage.html[+SPV_NV_sample_mask_override_coverage+]
https://www.khronos.org/registry/spir-v/extensions/NV/SPV_NV_sample_mask_override_coverage.html[`SPV_NV_sample_mask_override_coverage`]
SPIR-V extension.
- This extension requires the
https://www.khronos.org/registry/OpenGL/extensions/NV/NV_sample_mask_override_coverage.txt[+GL_NV_sample_mask_override_coverage+]
https://www.khronos.org/registry/OpenGL/extensions/NV/NV_sample_mask_override_coverage.txt[`GL_NV_sample_mask_override_coverage`]
extension for GLSL source languages.
*Contributors*::
- Daniel Koch, NVIDIA
@ -17,7 +17,7 @@ include::meta/VK_NV_sample_mask_override_coverage.txt[]
This extension adds support for the following SPIR-V extension in Vulkan:
* +SPV_NV_sample_mask_override_coverage+
* `SPV_NV_sample_mask_override_coverage`
The extension provides access to the code:OverrideCoverageNV decoration
under the code:SampleMaskOverrideCoverageNV capability.
@ -26,11 +26,11 @@ decoration allows the shader to modify the coverage mask and affect which
samples are used to process the fragment.
When using GLSL source-based shader languages, the code:override_coverage
layout qualifier from +GL_NV_sample_mask_override_coverage+ maps to the
layout qualifier from `GL_NV_sample_mask_override_coverage` maps to the
code:OverrideCoverageNV decoration.
To use the code:override_coverage layout qualifier in GLSL the
+GL_NV_sample_mask_override_coverage+ extension must be enabled.
Behavior is described in the +GL_NV_sample_mask_override_coverage+ extension
`GL_NV_sample_mask_override_coverage` extension must be enabled.
Behavior is described in the `GL_NV_sample_mask_override_coverage` extension
spec.
=== New Object Types

View File

@ -7,9 +7,9 @@ include::meta/VK_NV_shader_subgroup_partitioned.txt[]
This extension enables support for a new class of subgroup operations via
the
https://github.com/KhronosGroup/GLSL/blob/master/extensions/nv/GL_NV_shader_subgroup_partitioned.txt[+GL_NV_shader_subgroup_partitioned+]
https://github.com/KhronosGroup/GLSL/blob/master/extensions/nv/GL_NV_shader_subgroup_partitioned.txt[`GL_NV_shader_subgroup_partitioned`]
GLSL extension and
http://htmlpreview.github.io/?https://github.com/KhronosGroup/SPIRV-Registry/blob/master/extensions/NV/SPV_NV_shader_subgroup_partitioned.html[+SPV_NV_shader_subgroup_partitioned+]
http://htmlpreview.github.io/?https://github.com/KhronosGroup/SPIRV-Registry/blob/master/extensions/NV/SPV_NV_shader_subgroup_partitioned.html[`SPV_NV_shader_subgroup_partitioned`]
SPIR-V extension.
Support for these new operations is advertised via the
ename:VK_SUBGROUP_FEATURE_PARTITIONED_BIT_NV bit.

View File

@ -32,7 +32,7 @@ implementation reads a texel in the bound shading rate image and looks up
the fetched value in a palette to determine a base shading rate.
In addition to the API support controlling rasterization, this extension
also adds Vulkan support for the +SPV_NV_shading_rate+ extension to SPIR-V.
also adds Vulkan support for the `SPV_NV_shading_rate` extension to SPIR-V.
That extension provides two fragment shader variable decorations that allow
fragment shaders to determine the shading rate used for processing the
fragment:
@ -45,7 +45,7 @@ fragment:
When using SPIR-V in conjunction with the OpenGL Shading Language (GLSL),
the fragment shader capabilities are provided by the
+GL_NV_shading_rate_image+ language extension and correspond to the built-in
`GL_NV_shading_rate_image` language extension and correspond to the built-in
variables code:gl_FragmentSizeNV and code:gl_InvocationsPerPixelNV,
respectively.

View File

@ -4,10 +4,10 @@ include::meta/VK_NV_viewport_array2.txt[]
2017-02-15
*Interactions and External Dependencies*::
- This extension requires the
https://www.khronos.org/registry/spir-v/extensions/NV/SPV_NV_viewport_array2.html[+SPV_NV_viewport_array2+]
https://www.khronos.org/registry/spir-v/extensions/NV/SPV_NV_viewport_array2.html[`SPV_NV_viewport_array2`]
SPIR-V extension.
- This extension requires the
https://www.khronos.org/registry/OpenGL/extensions/NV/NV_viewport_array2.txt[+GL_NV_viewport_array2+]
https://www.khronos.org/registry/OpenGL/extensions/NV/NV_viewport_array2.txt[`GL_NV_viewport_array2`]
extension for GLSL source languages.
- This extension requires the pname:geometryShader and pname:multiViewport
features.
@ -18,7 +18,7 @@ include::meta/VK_NV_viewport_array2.txt[]
This extension adds support for the following SPIR-V extension in Vulkan:
* +SPV_NV_viewport_array2+
* `SPV_NV_viewport_array2`
which allows a single primitive to be broadcast to multiple viewports and/or
multiple layers.
@ -42,9 +42,9 @@ code:ShaderViewportMaskNV capability.
When using GLSL source-based shading languages, the code:gl_ViewportMask[]
built-in output variable and code:viewport_relative layout qualifier from
+GL_NV_viewport_array2+ map to the code:ViewportMaskNV and
`GL_NV_viewport_array2` map to the code:ViewportMaskNV and
code:ViewportRelativeNV decorations, respectively.
Behaviour is described in the +GL_NV_viewport_array2+ extension
Behaviour is described in the `GL_NV_viewport_array2` extension
specificiation.
ifdef::VK_EXT_shader_viewport_index_layer[]

View File

@ -130,7 +130,7 @@ below.
.Mapping of Vulkan ASTC decoding format to ASTC decoding modes
[width="75%",options="header",cols="75%,25%"]
|====
| VkFormat ^| Decoding mode
| elink:VkFormat ^| Decoding mode
| ename:VK_FORMAT_R16G16B16A16_SFLOAT ^| decode_float16
| ename:VK_FORMAT_R8G8B8A8_UNORM ^| decode_unorm8
| ename:VK_FORMAT_E5B9G9R9_UFLOAT_PACK32 ^| decode_rgb9e5

64
appendices/memorymodel.txt Normal file → Executable file
View File

@ -33,8 +33,8 @@ A memory operation must: not affect memory at a memory location not within
its set of memory locations.
Memory locations for buffers and images are explicitly allocated in
VkDeviceMemory objects, and are implicitly allocated for SPIR-V variables in
each shader invocation.
slink:VkDeviceMemory objects, and are implicitly allocated for SPIR-V
variables in each shader invocation.
[[memory-model-allocation]]
== Allocation
@ -413,7 +413,7 @@ NOTE: This covers all Vulkan synchronization primitives, including device
operations executing before a synchronization primitive is signaled, wait
operations happening before subsequent device operations, signal operations
happening before host operations that wait on them, and host operations
happening before vkQueueSubmit.
happening before flink:vkQueueSubmit.
The list is spread throughout the synchronization chapter, and is not
repeated here.
@ -514,9 +514,9 @@ The memory domains defined in Vulkan include:
corresponding to the code:Subgroup scope.
NOTE: These do not correspond to storage classes or device-local and
host-local VkDeviceMemory allocations, rather they indicate whether a write
can be made visible only to agents in the same subgroup, same workgroup, in
any shader invocation, or anywhere on the device, or host.
host-local slink:VkDeviceMemory allocations, rather they indicate whether a
write can be made visible only to agents in the same subgroup, same
workgroup, in any shader invocation, or anywhere on the device, or host.
The shader, queue family instance, workgroup instance, and subgroup instance
domains are only used for shader-based availability/visibility operatons, in
other cases writes can be made available from/visible to the shader via the
@ -569,6 +569,32 @@ other non-atomic memory accesses for the purpose of
<<memory-model-memory-semantics,memory semantics>>, meaning they can be
ordered by release-acquire sequences or memory barriers.
An _availability chain_ is a sequence of availability operations of
increasing scope where element N+1 of the chain is performed in the same
scope instance as the destination of element N and element N happens-before
element N+1.
An example is an availability operation with destination scope of the
workgroup instance domain that happens before an availability operation to
the shader domain performed by an invocation in the same workgroup.
An availability chain AVC that happens-after W and that includes (A,R,L) in
the source scope makes (W,L) _available_ to the memory domains in its final
destination scope.
An availability chain with a single element is just the availability
operation.
Similarly, a _visibility chain_ is a sequence of visibility operations of
decreasing scope where element N of the chain is performed in the same scope
instance as the source of element N+1 and element N happens-before element
N+1.
An example is a visibility operation with source scope of the shader domain
that happens before a visibility operation with source scope of the
workgroup instance domain performance by an invocation in the same
workgroup.
A visibility chain VISC that happens-after AVC (or DOM) and for which (W,L)
is available in any domain in the source scope makes (W,L) _visible_ to all
(agent,reference,L) tuples included in its final destination scope.
A visibility chain with a single element is just the visibility operation.
[[memory-model-vulkan-availability-visibility]]
== Availability, Visibility, and Domain Operations
@ -702,13 +728,16 @@ the following is true:
* If R~X~ == R~Y~ and A~X~ and A~Y~ access a common memory domain D (e.g.
are in the same workgroup instance if D is the workgroup instance
domain), and both X and Y are non-private:
** X is a write, Y is a write, AV(A~X~,R~X~,D,L) is an availability
operation making (X,L) available to domain D, and
X->^rcpo^AV(A~X~,R~X~,D,L)->Y
** X is a write, Y is a read, AV(A~X~,R~X~,D,L) is an availability
operation making (X,L) available to domain D, VIS(A~Y~,R~Y~,D,L) is a
visibility operation making writes to L available in domain D visible
to Y, and X->^rcpo^AV(A~X~,R~X~,D,L)->VIS(A~Y~,R~Y~,D,L)->^rcpo^Y
** X is a write, Y is a write, AVC(A~X~,R~X~,D,L) is an availability chain
making (X,L) available to domain D, and X->^rcpo^AVC(A~X~,R~X~,D,L)->Y
** X is a write, Y is a read, AVC(A~X~,R~X~,D,L) is an availability chain
making (X,L) available to domain D, VISC(A~Y~,R~Y~,D,L) is a visibility
chain making writes to L available in domain D visible to Y, and
X->^rcpo^AVC(A~X~,R~X~,D,L)->VISC(A~Y~,R~Y~,D,L)->^rcpo^Y
** If
slink:VkPhysicalDeviceVulkanMemoryModelFeaturesKHR::pname:vulkanMemoryModelAvailabilityVisibilityChains
is ename:VK_FALSE, then AVC and VISC must: each only have a single
element in the chain, in each sub-bullet above.
* Let D~X~ and D~Y~ each be either the device domain or the host domain,
depending on whether A~X~ and A~Y~ execute on the device or host:
@ -791,12 +820,13 @@ being read.
[[memory-model-deallocation]]
== Deallocation
A call to vkFreeMemory must: happen-after all memory operations on all
memory locations in that VkDeviceMemory object.
A call to flink:vkFreeMemory must: happen-after all memory operations on all
memory locations in that slink:VkDeviceMemory object.
NOTE: Normally, device memory operations in a given queue are synchronized
with vkFreeMemory by having a host thread wait on a fence signalled by that
queue, and the wait happens-before the call to vkFreeMemory on the host.
with flink:vkFreeMemory by having a host thread wait on a fence signalled by
that queue, and the wait happens-before the call to flink:vkFreeMemory on
the host.
The deallocation of SPIR-V variables is managed by the system and
happens-after all operations on those variables.

View File

@ -327,11 +327,6 @@ The application can: pass a SPIR-V module to flink:vkCreateShaderModule that
uses the `SPV_KHR_shader_draw_parameters` SPIR-V extension.
endif::VK_VERSION_1_1,VK_KHR_shader_draw_parameters[]
ifdef::VK_KHR_shader_float16_int8[]
The application can: pass a SPIR-V module to flink:vkCreateShaderModule that
uses the code:Float16 or the code:Int8 SPIR-V capabilities.
endif::VK_KHR_shader_float16_int8[]
ifdef::VK_KHR_8bit_storage[]
The application can: pass a SPIR-V module to flink:vkCreateShaderModule that
uses the `SPV_KHR_8bit_storage` SPIR-V extension.
@ -1095,7 +1090,7 @@ are required: to be at least as follows:
2+| Correctly rounded.
| code:OpFSub
2+| Correctly rounded.
| code:OpFMul
| code:OpFMul, code:OpVectorTimesScalar, code:OpMatrixTimesScalar
2+| Correctly rounded.
| code:OpDot(x, y)
2+| Inherited from latexmath:[\sum_{i = 0}^{n - 1} x_{i} \times y_{i}].
@ -1243,17 +1238,17 @@ at least as follows, unless decorated with RelaxedPrecision:
.Precision of core SPIR-V Instructions
[options="header"]
|====
| Instruction | Precision
| code:OpFAdd | Correctly rounded.
| code:OpFSub | Correctly rounded.
| code:OpFMul | Correctly rounded.
| code:OpFOrdEqual, code:OpFUnordEqual | Correct result.
| code:OpFOrdLessThan, code:OpFUnordLessThan | Correct result.
| code:OpFOrdGreaterThan, code:OpFUnordGreaterThan | Correct result.
| code:OpFOrdLessThanEqual, code:OpFUnordLessThanEqual | Correct result.
| code:OpFOrdGreaterThanEqual, code:OpFUnordGreaterThanEqual| Correct result.
| code:OpFDiv | 2.5 ULP for b in the range [2^-126^, 2^126^].
| conversions between types | Correctly rounded.
| Instruction | Precision
| code:OpFAdd | Correctly rounded.
| code:OpFSub | Correctly rounded.
| code:OpFMul, code:OpVectorTimesScalar, code:OpMatrixTimesScalar | Correctly rounded.
| code:OpFOrdEqual, code:OpFUnordEqual | Correct result.
| code:OpFOrdLessThan, code:OpFUnordLessThan | Correct result.
| code:OpFOrdGreaterThan, code:OpFUnordGreaterThan | Correct result.
| code:OpFOrdLessThanEqual, code:OpFUnordLessThanEqual | Correct result.
| code:OpFOrdGreaterThanEqual, code:OpFUnordGreaterThanEqual | Correct result.
| code:OpFDiv | 2.5 ULP for b in the range [2^-126^, 2^126^].
| conversions between types | Correctly rounded.
|====
.Precision of GLSL.std.450 Instructions

View File

@ -24,9 +24,9 @@ include::../../api/protos/vkCreateAndroidSurfaceKHR.txt[]
created surface object is returned.
During the lifetime of a surface created using a particular
code:ANativeWindow handle any attempts to create another surface for the
same code:ANativeWindow and any attempts to connect to the same
code:ANativeWindow through other platform mechanisms will fail.
dlink:ANativeWindow handle any attempts to create another surface for the
same dlink:ANativeWindow and any attempts to connect to the same
dlink:ANativeWindow through other platform mechanisms will fail.
[NOTE]
.Note
@ -38,7 +38,7 @@ code:EGLSurface simultaneously.
====
If successful, fname:vkCreateAndroidSurfaceKHR increments the
code:ANativeWindow's reference count, and fname:vkDestroySurfaceKHR will
dlink:ANativeWindow's reference count, and fname:vkDestroySurfaceKHR will
decrement it.
On Android, when a swapchain's pname:imageExtent does not match the
@ -62,13 +62,13 @@ include::../../api/structs/VkAndroidSurfaceCreateInfoKHR.txt[]
* pname:sType is the type of this structure.
* pname:pNext is `NULL` or a pointer to an extension-specific structure.
* pname:flags is reserved for future use.
* pname:window is a pointer to the code:ANativeWindow to associate the
* pname:window is a pointer to the dlink:ANativeWindow to associate the
surface with.
.Valid Usage
****
* [[VUID-VkAndroidSurfaceCreateInfoKHR-window-01248]]
pname:window must: point to a valid Android code:ANativeWindow.
pname:window must: point to a valid Android dlink:ANativeWindow.
****
include::../../validity/structs/VkAndroidSurfaceCreateInfoKHR.txt[]
@ -77,9 +77,9 @@ include::../../validity/structs/VkAndroidSurfaceCreateInfoKHR.txt[]
[open,refpage='ANativeWindow',desc='Android native window type',type='defines']
--
To remove an unnecessary compile-time dependency, an incomplete type
definition of code:ANativeWindow is provided in the Vulkan headers:
definition of dlink:ANativeWindow is provided in the Vulkan headers:
include::../../api/defines/ANativeWindow.txt[]
The actual code:ANativeWindow type is defined in Android NDK headers.
The actual dlink:ANativeWindow type is defined in Android NDK headers.
--

View File

@ -48,8 +48,8 @@ include::../../api/enums/VkExternalMemoryHandleTypeFlagBitsNV.txt[]
duplicated from such a handle using `DuplicateHandle()`.
* ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_BIT_NV specifies a
valid NT handle to memory returned by
`IDXGIResource1::ftext:CreateSharedHandle()`, or a handle duplicated
from such a handle using `DuplicateHandle()`.
`IDXGIResource1::CreateSharedHandle`, or a handle duplicated from such a
handle using `DuplicateHandle()`.
* ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_KMT_BIT_NV specifies a
handle to memory returned by `IDXGIResource::GetSharedHandle()`.

View File

@ -255,9 +255,9 @@ regardless if the pixels lie outside of the clear region.
Clears may: have a different set of supported fragment areas than draws.
endif::VK_EXT_fragment_density_map[]
Unlike other <<clears,clear commands>>, vkCmdClearAttachments executes as a
drawing command, rather than a transfer command, with writes performed by it
executing in <<primrast-order, rasterization order>>.
Unlike other <<clears,clear commands>>, flink:vkCmdClearAttachments executes
as a drawing command, rather than a transfer command, with writes performed
by it executing in <<primrast-order, rasterization order>>.
Clears to color attachments are executed as color attachment writes, by the
ename:VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT stage.
Clears to depth/stencil attachments are executed as <<fragops-depth, depth

View File

@ -1053,7 +1053,7 @@ reported by slink:VkPhysicalDeviceMemoryProperties, add a
slink:VkDeviceMemoryOverallocationCreateInfoAMD structure to the pname:pNext
chain of the slink:VkDeviceCreateInfo structure.
If this structure is not specified, it is as if the
VK_MEMORY_OVERALLOCATION_BEHAVIOR_DEFAULT_AMD value is used.
ename:VK_MEMORY_OVERALLOCATION_BEHAVIOR_DEFAULT_AMD value is used.
include::../api/structs/VkDeviceMemoryOverallocationCreateInfoAMD.txt[]

23
chapters/features.txt Normal file → Executable file
View File

@ -1042,8 +1042,9 @@ ifdef::VK_KHR_shader_float16_int8[]
[open,refpage='VkPhysicalDeviceFloat16Int8FeaturesKHR',desc='Structure describing features supported by VK_KHR_shader_float16_int8',type='structs']
--
To query features additionally supported by the +VK_KHR_shader_float16_int8+
extension, call flink:vkGetPhysicalDeviceFeatures2KHR with a
To query features additionally supported by the
`<<VK_KHR_shader_float16_int8>>` extension, call
flink:vkGetPhysicalDeviceFeatures2KHR with a
sname:VkPhysicalDeviceFloat16Int8FeaturesKHR structure in the pname:pNext
chain.
The sname:VkPhysicalDeviceFloat16Int8FeaturesKHR structure can: also be in
@ -1414,7 +1415,7 @@ structure describe the following features:
be used.
* [[features-features-runtimeDescriptorArray]]
pname:runtimeDescriptorArray indicates whether the implementation
supports the SPIR-V +RuntimeDescriptorArrayEXT+ capability.
supports the SPIR-V code:RuntimeDescriptorArrayEXT capability.
If this feature is not enabled, descriptors must: not be declared in
runtime arrays.
@ -1547,6 +1548,10 @@ include::../api/structs/VkPhysicalDeviceVulkanMemoryModelFeaturesKHR.txt[]
Model can use code:Device scope synchronization.
This also indicates whether shader modules can: declare the
code:VulkanMemoryModelDeviceScopeKHR capability.
* [[features-features-vulkanMemoryModelAvailabilityVisibilityChains]]
pname:vulkanMemoryModelAvailabilityVisibilityChains indicates whether
the Vulkan Memory Model can use <<memory-model-availability-visibility,
availability and visibility chains>> with more than one element.
include::../validity/structs/VkPhysicalDeviceVulkanMemoryModelFeaturesKHR.txt[]
--
@ -8259,8 +8264,8 @@ endif::VK_KHR_external_memory_capabilities[]
* ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT specifies a POSIX
file descriptor handle that has only limited valid usage outside of
Vulkan and other compatible APIs.
It must: be compatible with the POSIX system calls ftext:dup,
ftext:dup2, ftext:close, and the non-standard system call ftext:dup3.
It must: be compatible with the POSIX system calls code:dup, code:dup2,
code:close, and the non-standard system call code:dup3.
Additionally, it must: be transportable over a socket using an
code:SCM_RIGHTS control message.
It owns a reference to the underlying memory resource represented by its
@ -8268,9 +8273,9 @@ endif::VK_KHR_external_memory_capabilities[]
* ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT specifies an NT
handle that has only limited valid usage outside of Vulkan and other
compatible APIs.
It must: be compatible with the functions ftext:DuplicateHandle,
ftext:CloseHandle, ftext:CompareObjectHandles,
ftext:GetHandleInformation, and ftext:SetHandleInformation.
It must: be compatible with the functions code:DuplicateHandle,
code:CloseHandle, code:CompareObjectHandles, code:GetHandleInformation,
and code:SetHandleInformation.
It owns a reference to the underlying memory resource represented by its
Vulkan memory object.
* ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT specifies a
@ -8317,7 +8322,7 @@ ifdef::VK_EXT_external_memory_dma_buf[]
endif::VK_EXT_external_memory_dma_buf[]
ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
* ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID
specifies an code:AHardwareBuffer object defined by the Android NDK.
specifies an dlink:AHardwareBuffer object defined by the Android NDK.
See <<memory-external-android-hardware-buffer,Android Hardware Buffers>>
for more details of this handle type.
endif::VK_ANDROID_external_memory_android_hardware_buffer[]

View File

@ -1036,23 +1036,26 @@ ifdef::VK_VERSION_1_1[]
Instance-level functionality or behavior added by a <<versions, new core
version>> of the API must: not be used unless it is supported by the
instance as determined by flink:vkEnumerateInstanceVersion.
instance as determined by flink:vkEnumerateInstanceVersion and the specified
version of slink:VkApplicationInfo::pname:apiVersion.
endif::VK_VERSION_1_1[]
Physical-device-level functionality or behavior added by a <<versions, new
core version>> of the API must: not be used unless it is supported by the
physical device as determined by flink:vkGetPhysicalDeviceProperties.
physical device as determined by
slink:VkPhysicalDeviceProperties::pname:apiVersion and the specified version
of slink:VkApplicationInfo::pname:apiVersion.
Device-level functionality or behavior added by a <<versions, new core
version>> of the API must: not be used unless it is supported by the device
as determined by flink:vkGetPhysicalDeviceProperties.
as determined by slink:VkPhysicalDeviceProperties::pname:apiVersion and the
specified version of slink:VkApplicationInfo::pname:apiVersion.
[[fundamentals-returncodes]]
=== Return Codes
[open,refpage='VkResult',desc='Vulkan command return codes',type='enums',xrefs='TBD']
[open,refpage='VkResult',desc='Vulkan command return codes',type='enums']
--
While the core Vulkan API is not designed to capture incorrect usage, some

View File

@ -354,6 +354,39 @@ Otherwise, the application can: call flink:vkEnumerateInstanceVersion to
determine the version of Vulkan.
====
ifdef::VK_VERSION_1_1[]
As long as the instance supports at least Vulkan 1.1, an application can:
use different versions of Vulkan with an instance than it does with a device
or physical device.
[NOTE]
.Note
====
The Khronos validation layers will treat pname:apiVersion as the highest API
version the application targets, and will validate API usage against the
minimum of that version and the implementation version (instance or device,
depending on context).
If an application tries to use functionality from a greater version than
this, a validation error will be triggered.
For example, if the instance supports Vulkan 1.1 and three physical devices
support Vulkan 1.0, Vulkan 1.1, and a hypothetical Vulkan 1.2, respectively,
and if the application sets pname:apiVersion to 1.2, the application can:
use the following versions of Vulkan:
* Vulkan 1.0 can: be used with the instance and with all physical devices.
* Vulkan 1.1 can: be used with the instance and with the physical devices
that support Vulkan 1.1 and Vulkan 1.2.
* Vulkan 1.2 can: be used with the physical device that supports Vulkan
1.2.
If we modify the above example so that the application sets pname:apiVersion
to 1.1, then the application must: not use Vulkan 1.2 functionality on the
physical device that supports Vulkan 1.2.
====
endif::VK_VERSION_1_1[]
Implicit layers must: be disabled if they do not support a version at least
as high as pname:apiVersion.
See the <<LoaderAndLayerInterface, Vulkan Loader Specification and

View File

@ -501,10 +501,13 @@ be accessed with _dynamically uniform_ indices.
=== Descriptor Set Interface
The _descriptor set interface_ is comprised of the shader variables with the
storage class of code:Uniform or code:UniformConstant (including the
variables in the <<interfaces-inputattachment,fragment input attachment
interface>>) that are statically used by the shader entry points for the
pipeline.
storage class of
ifdef::VK_VERSION_1_1,VK_KHR_storage_buffer_storage_class[]
code:StorageBuffer,
endif::VK_VERSION_1_1,VK_KHR_storage_buffer_storage_class[]
code:Uniform or code:UniformConstant (including the variables in the
<<interfaces-inputattachment,fragment input attachment interface>>) that are
statically used by the shader entry points for the pipeline.
These variables must: have code:DescriptorSet and code:Binding decorations
specified, which are assigned and matched with the

View File

@ -1171,7 +1171,7 @@ ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
Android hardware buffer, and the pname:pNext chain includes an instance
of slink:VkMemoryDedicatedAllocateInfo with pname:image that is not
dlink:VK_NULL_HANDLE, the Android hardware buffer's
code:AHardwareBuffer::code:usage must: include at least one of
dlink:AHardwareBuffer::code:usage must: include at least one of
code:AHARDWAREBUFFER_USAGE_GPU_COLOR_OUTPUT or
code:AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE.
* [[VUID-VkMemoryAllocateInfo-pNext-02387]]
@ -1195,7 +1195,7 @@ ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
Android hardware buffer, and the pname:pNext chain includes an instance
of slink:VkMemoryDedicatedAllocateInfo with pname:image that is not
dlink:VK_NULL_HANDLE, and the Android hardware buffer's
code:AHardwareBuffer::code:usage includes
dlink:AHardwareBuffer::code:usage includes
code:AHARDWAREBUFFER_USAGE_GPU_MIPMAP_COMPLETE, the pname:image must:
have a complete mipmap chain.
* [[VUID-VkMemoryAllocateInfo-pNext-02586]]
@ -1203,7 +1203,7 @@ ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
Android hardware buffer, and the pname:pNext chain includes an instance
of slink:VkMemoryDedicatedAllocateInfo with pname:image that is not
dlink:VK_NULL_HANDLE, and the Android hardware buffer's
code:AHardwareBuffer::code:usage does not include
dlink:AHardwareBuffer::code:usage does not include
code:AHARDWAREBUFFER_USAGE_GPU_MIPMAP_COMPLETE, the pname:image must:
have exactly one mipmap level.
* [[VUID-VkMemoryAllocateInfo-pNext-02390]]
@ -2250,7 +2250,7 @@ sname:VkAndroidHardwareBufferFormatPropertiesANDROID are only suggestions.
Applications should: treat these values as sensible defaults to use in the
absence of more reliable information obtained through some other means.
If the underlying physical device is also usable via OpenGL ES with the
https://www.khronos.org/registry/OpenGL/extensions/OES/OES_EGL_image_external.txt[+GL_OES_EGL_image_external+]
https://www.khronos.org/registry/OpenGL/extensions/OES/OES_EGL_image_external.txt[`GL_OES_EGL_image_external`]
extension, the implementation should: suggest values that will produce
similar sampled values as would be obtained by sampling the same external
image via code:samplerExternalOES in OpenGL ES using equivalent sampler
@ -2260,7 +2260,7 @@ parameters.
.Note
====
Since
https://www.khronos.org/registry/OpenGL/extensions/OES/OES_EGL_image_external.txt[+GL_OES_EGL_image_external+]
https://www.khronos.org/registry/OpenGL/extensions/OES/OES_EGL_image_external.txt[`GL_OES_EGL_image_external`]
does not require the same sampling and conversion calculations as Vulkan
does, achieving identical results between APIs may: not be possible on some
implementations.
@ -2871,7 +2871,7 @@ ifdef::VK_KHR_external_memory_capabilities+VK_ANDROID_external_memory_android_ha
[[memory-external-android-hardware-buffer]]
==== Android Hardware Buffer
Android's NDK defines code:AHardwareBuffer objects, which represent device
Android's NDK defines dlink:AHardwareBuffer objects, which represent device
memory that is shareable across processes and that can: be accessed by a
variety of media APIs and the hardware used to implement them.
These Android hardware buffer objects may: be imported into
@ -2880,18 +2880,18 @@ slink:VkDeviceMemory objects for access via Vulkan, or exported from Vulkan.
[open,refpage='AHardwareBuffer',desc='Android hardware buffer type',type='defines']
--
To remove an unnecessary compile-time dependency, an incomplete type
definition of code:AHardwareBuffer is provided in the Vulkan headers:
definition of dlink:AHardwareBuffer is provided in the Vulkan headers:
include::../api/defines/AHardwareBuffer.txt[]
The actual code:AHardwareBuffer type is defined in Android NDK headers.
The actual dlink:AHardwareBuffer type is defined in Android NDK headers.
--
[NOTE]
.Note
====
The NDK format, usage, and size/dimensions of an code:AHardwareBuffer object
can be obtained with the code:AHardwareBuffer_describe function.
The NDK format, usage, and size/dimensions of an dlink:AHardwareBuffer
object can be obtained with the code:AHardwareBuffer_describe function.
While Android hardware buffers can be imported to or exported from Vulkan
without using that function, valid usage and implementation behavior is
defined in terms of the code:AHardwareBuffer_Desc properties it returns.
@ -2901,7 +2901,7 @@ Android hardware buffer objects are reference-counted using Android NDK
functions outside of the scope of this specification.
A slink:VkDeviceMemory imported from an Android hardware buffer or that can:
be exported to an Android hardware buffer must: acquire a reference to its
code:AHardwareBuffer object, and must: release this reference when the
dlink:AHardwareBuffer object, and must: release this reference when the
device memory is freed.
During the host execution of a Vulkan command that has an Android hardware
buffer as a parameter (including indirect parameters via pname:pNext
@ -3000,7 +3000,7 @@ sname:VkExternalMemoryImageCreateInfo::pname:handleTypes that includes
ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID.
When creating an image that will be bound to an imported Android hardware
buffer, the image creation parameters must: be equivalent to the
code:AHardwareBuffer properties as described by the valid usage of
dlink:AHardwareBuffer properties as described by the valid usage of
slink:VkMemoryAllocateInfo.
Similarly, device memory allocated for a dedicated image must: not be
exported to an Android hardware buffer until it has been bound to that
@ -3113,7 +3113,7 @@ code:width; code:height and code:layers are both `1`.
Unlike images, buffer resources backed by Android hardware buffers do not
require dedicated allocations.
Exported code:AHardwareBuffer objects that do not have dedicated images
Exported dlink:AHardwareBuffer objects that do not have dedicated images
must: have a format of code:AHARDWAREBUFFER_FORMAT_BLOB, usage must: include
code:AHARDWAREBUFFER_USAGE_GPU_DATA_BUFFER, code:width must: equal the
device memory allocation size, and code:height and code:layers must: be `1`.

View File

@ -144,25 +144,18 @@ include::../api/structs/VkRenderPassCreateInfo.txt[]
* pname:pNext is `NULL` or a pointer to an extension-specific structure.
* pname:flags is reserved for future use.
* pname:attachmentCount is the number of attachments used by this render
pass, or zero indicating no attachments.
Attachments are referred to by zero-based indices in the range
[0,pname:attachmentCount).
* pname:pAttachments points to an array of pname:attachmentCount number of
slink:VkAttachmentDescription structures describing properties of the
attachments, or `NULL` if pname:attachmentCount is zero.
* pname:subpassCount is the number of subpasses to create for this render
pass.
Subpasses are referred to by zero-based indices in the range
[0,pname:subpassCount).
A render pass must: have at least one subpass.
* pname:pSubpasses points to an array of pname:subpassCount number of
slink:VkSubpassDescription structures describing properties of the
subpasses.
* pname:dependencyCount is the number of dependencies between pairs of
subpasses, or zero indicating no dependencies.
* pname:pDependencies points to an array of pname:dependencyCount number
of slink:VkSubpassDependency structures describing dependencies between
pairs of subpasses, or `NULL` if pname:dependencyCount is zero.
* pname:pAttachments points to an array of pname:attachmentCount
slink:VkAttachmentDescription structures describing the attachments used
by the render pass.
* pname:subpassCount is the number of subpasses to create.
* pname:pSubpasses points to an array of pname:subpassCount
slink:VkSubpassDescription structures describing each subpass.
* pname:dependencyCount is the number of memory dependencies between pairs
of subpasses.
* pname:pDependencies points to an array of pname:dependencyCount
slink:VkSubpassDependency structures describing dependencies between
pairs of subpasses.
[NOTE]
.Note
@ -542,8 +535,6 @@ include::../api/structs/VkAttachmentDescription.txt[]
be in when a render pass instance begins.
* pname:finalLayout is the layout the attachment image subresource will be
transitioned to when a render pass instance ends.
During a render pass instance, an attachment can: use a different layout
in each subpass, if desired.
[[renderpass-load-store-ops]]
If the attachment uses a color format, then pname:loadOp and pname:storeOp
@ -1087,11 +1078,10 @@ The sname:VkAttachmentReference structure is defined as:
include::../api/structs/VkAttachmentReference.txt[]
* pname:attachment is the index of the attachment of the render pass, and
corresponds to the index of the corresponding element in the
pname:pAttachments array of the sname:VkRenderPassCreateInfo structure.
If any color or depth/stencil attachments are
ename:VK_ATTACHMENT_UNUSED, then no writes occur for those attachments.
* pname:attachment is either an integer value identifying an attachment at
the corresponding index in
slink:VkRenderPassCreateInfo::pname:pAttachments, or
ename:VK_ATTACHMENT_UNUSED to signify that this attachment is not used.
* pname:layout is a elink:VkImageLayout value specifying the layout the
attachment uses during the subpass.
@ -3211,4 +3201,3 @@ include::../validity/structs/VkSubpassEndInfoKHR.txt[]
--
endif::VK_KHR_create_renderpass2[]

View File

@ -122,7 +122,7 @@ ifdef::VK_NV_glsl_shader[]
* [[VUID-VkShaderModuleCreateInfo-pCode-01377]]
pname:pCode must: point to either valid SPIR-V code, formatted and
packed as described by the <<spirv-spec,Khronos SPIR-V Specification>>
or valid GLSL code which must: be written to the +GL_KHR_vulkan_glsl+
or valid GLSL code which must: be written to the `GL_KHR_vulkan_glsl`
extension specification
* [[VUID-VkShaderModuleCreateInfo-pCode-01378]]
If pname:pCode points to SPIR-V code, that code must: adhere to the
@ -131,7 +131,7 @@ ifdef::VK_NV_glsl_shader[]
<<spirvenv-capabilities,SPIR-V Environment>> appendix
* [[VUID-VkShaderModuleCreateInfo-pCode-01379]]
If pname:pCode points to GLSL code, it must: be valid GLSL code written
to the +GL_KHR_vulkan_glsl+ GLSL extension specification
to the `GL_KHR_vulkan_glsl` GLSL extension specification
endif::VK_NV_glsl_shader[]
* [[VUID-VkShaderModuleCreateInfo-pCode-01089]]
pname:pCode must: declare the code:Shader capability for SPIR-V code
@ -1209,7 +1209,7 @@ pname:pDataSize.
include::../validity/protos/vkGetValidationCacheDataEXT.txt[]
--
[open,refpage='VkValidationCacheHeaderVersionEXT',desc='Encode validation cache version',type='enums',xrefs='vkCreateValdiationCacheEXT vkGetValidationCacheDataEXT']
[open,refpage='VkValidationCacheHeaderVersionEXT',desc='Encode validation cache version',type='enums',xrefs='vkCreateValidationCacheEXT vkGetValidationCacheDataEXT']
--
Possible values of the second group of four bytes in the header returned by
flink:vkGetValidationCacheDataEXT, encoding the validation cache version,

View File

@ -368,9 +368,9 @@ ifdef::VK_NV_ray_tracing[]
* ename:VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_NV specifies the
execution of the ray tracing shader stages.
* ename:VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_NV specifies
the execution of vkCmdBuildAccelerationStructureNV,
vkCmdCopyAccelerationStructureNV, and
vkCmdWriteAccelerationStructuresPropertiesNV.
the execution of flink:vkCmdBuildAccelerationStructureNV,
flink:vkCmdCopyAccelerationStructureNV, and
flink:vkCmdWriteAccelerationStructuresPropertiesNV.
endif::VK_NV_ray_tracing[]
* ename:VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT specifies the execution of all
graphics pipeline stages, and is equivalent to the logical OR of:
@ -1947,7 +1947,7 @@ include::../api/structs/VkImportFenceWin32HandleInfoKHR.txt[]
The handle types supported by pname:handleType are:
[[synchronization-fence-handletypes-win32]]
.Handle Types Supported by VkImportFenceWin32HandleInfoKHR
.Handle Types Supported by slink:VkImportFenceWin32HandleInfoKHR
[width="80%",options="header"]
|====
| Handle Type | Transference | Permanence Supported
@ -2038,7 +2038,7 @@ include::../api/structs/VkImportFenceFdInfoKHR.txt[]
The handle types supported by pname:handleType are:
[[synchronization-fence-handletypes-fd]]
.Handle Types Supported by VkImportFenceFdInfoKHR
.Handle Types Supported by slink:VkImportFenceFdInfoKHR
[width="80%",options="header"]
|====
| Handle Type | Transference | Permanence Supported
@ -2854,7 +2854,7 @@ include::../api/structs/VkImportSemaphoreWin32HandleInfoKHR.txt[]
The handle types supported by pname:handleType are:
[[synchronization-semaphore-handletypes-win32]]
.Handle Types Supported by VkImportSemaphoreWin32HandleInfoKHR
.Handle Types Supported by slink:VkImportSemaphoreWin32HandleInfoKHR
[width="80%",options="header"]
|====
| Handle Type | Transference | Permanence Supported
@ -2952,7 +2952,7 @@ include::../api/structs/VkImportSemaphoreFdInfoKHR.txt[]
The handle types supported by pname:handleType are:
[[synchronization-semaphore-handletypes-fd]]
.Handle Types Supported by VkImportSemaphoreFdInfoKHR
.Handle Types Supported by slink:VkImportSemaphoreFdInfoKHR
[width="80%",options="header"]
|====
| Handle Type | Transference | Permanence Supported

View File

@ -265,6 +265,11 @@ feedback buffer will not be captured.
The sum of pname:firstCounterBuffer and pname:counterBufferCount must:
be less than or equal to
sname:VkPhysicalDeviceTransformFeedbackPropertiesEXT::pname:maxTransformFeedbackBuffers
* [[VUID-vkCmdBeginTransformFeedbackEXT-counterBufferCount-02607]]
If pname:counterBufferCount is not `0`, and pname:pCounterBuffers is not
`NULL`, pname:pCounterBuffers must: be a valid pointer to an array of
pname:counterBufferCount sname:VkBuffer handles that are either valid or
dlink:VK_NULL_HANDLE
* [[VUID-vkCmdBeginTransformFeedbackEXT-pCounterBufferOffsets-02370]]
For each buffer handle in the array, if it is not dlink:VK_NULL_HANDLE
it must: reference a buffer large enough to hold 4 bytes at the
@ -334,6 +339,11 @@ include::../api/protos/vkCmdEndTransformFeedbackEXT.txt[]
The sum of pname:firstCounterBuffer and pname:counterBufferCount must:
be less than or equal to
sname:VkPhysicalDeviceTransformFeedbackPropertiesEXT::pname:maxTransformFeedbackBuffers
* [[VUID-vkCmdEndTransformFeedbackEXT-counterBufferCount-02608]]
If pname:counterBufferCount is not `0`, and pname:pCounterBuffers is not
`NULL`, pname:pCounterBuffers must: be a valid pointer to an array of
pname:counterBufferCount sname:VkBuffer handles that are either valid or
dlink:VK_NULL_HANDLE
* [[VUID-vkCmdEndTransformFeedbackEXT-pCounterBufferOffsets-02378]]
For each buffer handle in the array, if it is not dlink:VK_NULL_HANDLE
it must: reference a buffer large enough to hold 4 bytes at the

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 97
#define VK_HEADER_VERSION 98
#define VK_NULL_HANDLE 0
@ -6244,7 +6244,7 @@ typedef struct VkPhysicalDeviceDepthStencilResolvePropertiesKHR {
#define VK_KHR_vulkan_memory_model 1
#define VK_KHR_VULKAN_MEMORY_MODEL_SPEC_VERSION 2
#define VK_KHR_VULKAN_MEMORY_MODEL_SPEC_VERSION 3
#define VK_KHR_VULKAN_MEMORY_MODEL_EXTENSION_NAME "VK_KHR_vulkan_memory_model"
typedef struct VkPhysicalDeviceVulkanMemoryModelFeaturesKHR {
@ -6252,6 +6252,7 @@ typedef struct VkPhysicalDeviceVulkanMemoryModelFeaturesKHR {
void* pNext;
VkBool32 vulkanMemoryModel;
VkBool32 vulkanMemoryModelDeviceScope;
VkBool32 vulkanMemoryModelAvailabilityVisibilityChains;
} VkPhysicalDeviceVulkanMemoryModelFeaturesKHR;

View File

@ -335,53 +335,60 @@ class ReflowState:
# Emit a paragraph, possibly reflowing it depending on the block
# context. Reset the paragraph accumulator.
def emitPara(self):
global vuPat
global vuPat, nestedVuPat
if self.para != []:
if (self.vuStack[-1] and
self.nextvu != None and
self.vuPrefix not in self.para[0]):
if self.vuStack[-1] and self.nextvu != None:
# If:
# - this paragraph is in a Valid Usage block,
# - VUID tags are being assigned,
# - a tag is not already present, and
# - the paragraph is a properly marked-up list item
# Then add a VUID tag starting with the next free ID.
# Try to assign VUIDs
# Split the first line after the bullet point
matches = vuPat.search(self.para[0])
if matches != None:
logDiag('findRefs: Matched vuPat on line:', self.para[0], end='')
head = matches.group('head')
tail = matches.group('tail')
# Use the first pname: statement in the paragraph as
# the parameter name in the VUID tag. This won't always
# be correct, but should be highly reliable.
for vuLine in self.para:
matches = pnamePat.search(vuLine)
if matches != None:
break
if nestedVuPat.search(self.para[0]):
# Check for nested bullet points. These should not be
# assigned VUIDs, nor present at all, because they break
# the VU extractor.
logWarn(self.filename + ': Invalid nested bullet point in VU block:', self.para[0])
elif self.vuPrefix not in self.para[0]:
# If:
# - a tag is not already present, and
# - the paragraph is a properly marked-up list item
# Then add a VUID tag starting with the next free ID.
# Split the first line after the bullet point
matches = vuPat.search(self.para[0])
if matches != None:
paramName = matches.group('param')
else:
paramName = 'None'
logWarn(self.filename,
'No param name found for VUID tag on line:',
self.para[0])
logDiag('findRefs: Matched vuPat on line:', self.para[0], end='')
head = matches.group('head')
tail = matches.group('tail')
newline = (head + ' [[' +
self.vuFormat.format(self.vuPrefix,
self.apiName,
paramName,
self.nextvu) + ']] ' + tail)
# Use the first pname: statement in the paragraph as
# the parameter name in the VUID tag. This won't always
# be correct, but should be highly reliable.
for vuLine in self.para:
matches = pnamePat.search(vuLine)
if matches != None:
break
logDiag('Assigning', self.vuPrefix, self.apiName, self.nextvu,
' on line:', self.para[0], '->', newline, 'END')
if matches != None:
paramName = matches.group('param')
else:
paramName = 'None'
logWarn(self.filename,
'No param name found for VUID tag on line:',
self.para[0])
self.para[0] = newline
self.nextvu = self.nextvu + 1
newline = (head + ' [[' +
self.vuFormat.format(self.vuPrefix,
self.apiName,
paramName,
self.nextvu) + ']] ' + tail)
logDiag('Assigning', self.vuPrefix, self.apiName, self.nextvu,
' on line:', self.para[0], '->', newline, 'END')
self.para[0] = newline
self.nextvu = self.nextvu + 1
# else:
# There are only a few cases of this, and they're all
# legitimate. Leave detecting this case to another tool
@ -612,7 +619,9 @@ def reflowAllAdocFiles(folder_to_reflow, args):
# the trailing newline.
global vuPat
vuPat = re.compile('^(?P<head> [*]+)( *)(?P<tail>.*)', re.DOTALL)
# Pattern matching leading nested bullet points
global nestedVuPat
nestedVuPat = re.compile('^ \*\*')
if __name__ == '__main__':
parser = argparse.ArgumentParser()

View File

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

View File

@ -753,9 +753,32 @@ For core Vulkan API and KHR extension bitmask types, reservations must be
approved by a vote of the Vulkan Working Group.
For EXT and vendor extension bitmask types, reservations must be approved by
the listed contact of the extension.
Bits are not reserved, and must not be used in a published implementation or
specification until the reservation is merged into
<<extensions-api-registry,`vk.xml`>> by the registry maintainer.
Bits are reserved in the same fashion as extension numbers, by creating a
dummy reservation for each bit in the disabled XML `<extension>` block for
that extension in the `master` branch.
Once the extension is ready to be merged into `master`, the `<extension>`
block is updated with the actual name.
An example reservation for a disabled extension is:
[source,xml]
----
<extension name="VK_AMD_extension_24" number="24" author="AMD" supported="disabled">
<require>
<enum bitpos="6" extends="VkQueueFlagBits" name="VK_QUEUE_RESERVED_6_BIT_KHR"/>
----
[NOTE]
.Note
====
Because of the way in which extension bitmask values are assigned inside the
XML `<extension>` tag, it is not always obvious what the next free bit in a
bitmask type is, or when a collision occurs.
The most straightforward way to determine the next free bit for a given
bitmask type is to look at the declaration of that type in the generated
header files.
When generating the headers, the script will raise warnings about "`Two
enums found with the same value`" that will help identify this problem.
====
== Required Extension Tokens

View File

@ -150,6 +150,8 @@ include::style/vuid.txt[]
= Revision History
* 2019-01-06 - Add details on <<extensions-reserving-bitmask-values,
Reserving Bitmask Values>> (internal issue 1411).
* 2018-11-19 - Add details to the <<extensions-documenting-extensions,
Changes for New Extensions>> section including the new "`Description`"
section, and other standard parts of extension appendices.

View File

@ -1,6 +1,6 @@
#!/usr/bin/python3
#
# Copyright (c) 2018 Collabora, Ltd.
# Copyright (c) 2018-2019 Collabora, Ltd.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@ -47,8 +47,7 @@ ENTITIES_WITHOUT_VALIDITY = set(
SYSTEM_TYPES = set(['void', 'char', 'float', 'size_t', 'uintptr_t',
'int8_t', 'uint8_t',
'int32_t', 'uint32_t',
'int64_t', 'uint64_t', 'ANativeWindow', 'AHardwareBuffer'])
'int64_t', 'uint64_t'])
PLATFORM_REQUIRES = 'vk_platform'
@ -64,6 +63,17 @@ INCLUDE = re.compile(
r'include::(?P<directory_traverse>((../){1,4}|\{INCS-VAR\}/))(?P<generated_type>[\w]+)/(?P<category>\w+)/(?P<entity_name>[^./]+).txt[[][]]')
ANCHOR = re.compile(r'\[\[(?P<entity_name>[^\]]+)\]\]')
BRACKETS = re.compile(r'\[(?P<tags>.*)\]')
def makeRefPageRE(field_name):
return re.compile(r",{}='(?P<text>[^']*)'".format(field_name))
REF_PAGE_TAGS = {
field: makeRefPageRE(field) for field in ['refpage', 'desc', 'xrefs', 'type']
}
MEMBER_REFERENCE = re.compile(
r'\b(?P<first_part>(?P<scope_macro>[fs](text|link)):(?P<scope>[\w*]+))(?P<double_colons>::)(?P<second_part>(?P<member_macro>pname:?)(?P<entity_name>[\w]+))\b'
)
@ -191,7 +201,7 @@ def shouldEntityBeText(entity, subscript):
EntityData = namedtuple(
'EntityData', ['entity', 'macro', 'elem', 'filename', 'category'])
'EntityData', ['entity', 'macro', 'elem', 'filename', 'category', 'directory'])
def entityToDict(data):
@ -242,6 +252,12 @@ class MessageId(Enum):
MISSING_API_INCLUDE = 16
MISUSED_TEXT = 17
EXTENSION = 18
REFPAGE_TAG = 19
REFPAGE_MISSING_DESC = 20
REFPAGE_XREFS = 21
REFPAGE_XREFS_COMMA = 22
REFPAGE_TYPE = 23
REFPAGE_NAME = 24
def __str__(self):
return self.name.lower()
@ -290,6 +306,18 @@ class MessageId(Enum):
return "a *text: macro is found but not expected"
elif self == MessageId.EXTENSION:
return "an extension name is incorrectly marked"
elif self == MessageId.REFPAGE_TAG:
return "a refpage tag is missing an expected field"
elif self == MessageId.REFPAGE_MISSING_DESC:
return "a refpage tag has an empty description"
elif self == MessageId.REFPAGE_XREFS:
return "an unrecognized entity is mentioned in xrefs of a refpage tag"
elif self == MessageId.REFPAGE_XREFS_COMMA:
return "a comma was founds in xrefs of a refpage tag, which is space-delimited"
elif self == MessageId.REFPAGE_TYPE:
return "a refpage tag has an incorrect type field"
elif self == MessageId.REFPAGE_NAME:
return "a refpage tag has an unrecognized entity name in its refpage field"
@classmethod
def default_set(self):
@ -514,12 +542,14 @@ class MacroCheckerFile(object):
self.diag(MessageType.ERROR, message_id, messageLines, group,
replacement, context, fix, see_also)
def storeMessageContext(self, group=None):
def storeMessageContext(self, group=None, match=None):
"""Create message context from corresponding instance variables."""
if match is None:
match = self.match
return MessageContext(filename=self.filename,
lineNum=self.lineNum,
line=self.line,
match=self.match,
match=match,
group=group)
def makeFix(self, newMacro=None, newEntity=None, data=None):
@ -791,6 +821,123 @@ class MacroCheckerFile(object):
else:
include_dict[entity] = [self.storeMessageContext()]
def checkRefPageXref(self, referenced_entity, line_context):
data = self.checker.findEntity(referenced_entity)
if data:
# This is OK
return
context = line_context
match = re.search(r'\b{}\b'.format(referenced_entity), self.line)
if match:
context = self.storeMessageContext(
group=None, match=match)
msg = [
"Found reference page markup, with an unrecognized entity listed: {}".format(referenced_entity)]
see_also = None
dataArray = self.checker.findEntityCaseInsensitive(
referenced_entity)
if dataArray:
# We might have found the goof...
if len(dataArray) == 1:
# Yep, found the goof - incorrect entity capitalization
data = dataArray[0]
new_entity = data.entity
self.error(MessageId.REFPAGE_XREFS, msg + ['Apparently matching entity in category {} found by searching case-insensitively.'.format(data.category)],
replacement=new_entity,
fix=(referenced_entity, new_entity),
context=context)
return
# Ugh, more than one resolution
msg.append(
'More than one apparent match found by searching case-insensitively, cannot auto-fix.')
see_also = dataArray[:]
# Multiple or no resolutions found
self.error(MessageId.REFPAGE_XREFS,
msg,
see_also=see_also,
context=context)
def checkRefPageXrefs(self, xrefs_match):
text = xrefs_match.group('text')
context = self.storeMessageContext(group='text', match=xrefs_match)
if ',' in text:
self.error(MessageId.REFPAGE_XREFS_COMMA,
"Found reference page markup, with an unexpected comma in the (space-delimited) field xrefs='{}'".format(
text),
context=context)
return
refs = text.split()
# Don't do this if we found a comma, since that's a clearer error message
for entity in refs:
self.checkRefPageXref(entity, context)
def checkRefPage(self):
line = self.line
# Should always be found
self.match = BRACKETS.match(line)
data = None
directory = None
refpage = REF_PAGE_TAGS['refpage'].search(line)
if refpage:
text = refpage.group('text')
data = self.checker.findEntity(text)
if data:
directory = data.directory
else:
# TODO suggest fixes here if applicable
context = self.storeMessageContext(
group='text', match=refpage)
self.error(MessageId.REFPAGE_NAME,
"Found reference page markup, but refpage='{}' does not refer to a recognized entity".format(
text),
context=context)
else:
self.error(MessageId.REFPAGE_TAG,
"Found apparent reference page markup, but missing refpage='...'",
group=None)
desc = REF_PAGE_TAGS['desc'].search(line)
if desc:
text = desc.group('text')
if not text:
context = self.storeMessageContext(group=None, match=desc)
self.warning(MessageId.REFPAGE_MISSING_DESC,
"Found reference page markup, but desc='' is empty",
context=context)
else:
self.error(MessageId.REFPAGE_TAG,
"Found apparent reference page markup, but missing desc='...'",
group=None)
ref_type = REF_PAGE_TAGS['type'].search(line)
if ref_type:
text = ref_type.group('text')
if directory and not text == directory:
context = self.storeMessageContext(
group='text', match=ref_type)
self.error(MessageId.REFPAGE_TYPE,
"Found reference page markup, but type='{}' is not the expected value '{}'".format(
text, directory),
context=context)
else:
self.error(MessageId.REFPAGE_TAG,
"Found apparent reference page markup, but missing type='...'",
group=None)
xrefs = REF_PAGE_TAGS['xrefs'].search(line)
if xrefs:
# This field is optional
self.checkRefPageXrefs(xrefs)
def processLine(self, lineNum, line):
self.lineNum = lineNum
self.line = line
@ -821,8 +968,9 @@ class MacroCheckerFile(object):
###
# Detect [open, lines for manpages
# TODO: Verify these (and use for pname context) instead of skipping them.
if line.startswith('[open,refpage='):
# TODO: Use these for pname context too.
if line.startswith('[open,'):
self.checkRefPage()
return
###
@ -1190,7 +1338,8 @@ class MacroChecker(object):
macro=macro,
elem=elem,
filename=filename,
category=category
category=category,
directory=directory
)
if entityName in self.byEntity:
# skip
@ -1319,7 +1468,7 @@ class MacroChecker(object):
def processString(self, s):
"""For testing purposes"""
filename = "string{}".format(len(self.files))
filename = "string{}: {}".format(len(self.files), s)
class StringStreamMaker(object):
def __init__(self, string):
@ -1938,17 +2087,17 @@ if __name__ == '__main__':
disable_arg = message_id.disable_arg()
disable_args.append((message_id, disable_arg))
if message_id in enabled_messages:
parser.add_argument('-' + enable_arg, action="store_true",
parser.add_argument('-' + disable_arg, action="store_true",
help="Disable message category {}: {}".format(str(message_id), message_id.desc()))
# Don't show the disable flag in help since it's disabled by default
parser.add_argument('-' + disable_arg, action="store_true",
help=argparse.SUPPRESS)
else:
parser.add_argument('-' + disable_arg, action="store_true",
help="Enable message category {}: {}".format(str(message_id), message_id.desc()))
# Don't show the enable flag in help since it's enabled by default
parser.add_argument('-' + enable_arg, action="store_true",
help=argparse.SUPPRESS)
else:
parser.add_argument('-' + enable_arg, action="store_true",
help="Enable message category {}: {}".format(str(message_id), message_id.desc()))
# Don't show the disable flag in help since it's disabled by default
parser.add_argument('-' + disable_arg, action="store_true",
help=argparse.SUPPRESS)
args = parser.parse_args()
@ -1994,13 +2143,22 @@ if __name__ == '__main__':
numErrors = checker.numErrors()
check_includes = args.include_warn
check_broken = True
if args.file and args.include_warn:
print('Note: forcing --include_warn off because only checking supplied files.')
printer.outputResults(checker, broken_links=(not args.file),
missing_includes=(args.include_warn and not args.file))
check_broken = not args.file
if args.include_error and not args.file:
if args.file and check_includes:
print('Note: forcing --include_warn off because only checking supplied files.')
check_includes = False
printer.outputResults(checker, broken_links=(not args.file),
missing_includes=check_includes)
if check_broken:
numErrors += len(checker.getBrokenLinks())
if args.file and args.include_error:
print('Note: forcing --include_error off because only checking supplied files.')
args.include_error = False
if args.include_error:
numErrors += len(checker.getMissingUnreferencedApiIncludes())
printer.close()

View File

@ -1,6 +1,6 @@
#!/usr/bin/python3
#
# Copyright (c) 2018 Collabora, Ltd.
# Copyright (c) 2018-2019 Collabora, Ltd.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@ -18,28 +18,38 @@
#
# Purpose: This file contains tests for check_spec_links.py
from check_spec_links import MacroChecker, MessageId, shouldEntityBeText
from check_spec_links import MacroChecker, MessageId, shouldEntityBeText, ConsolePrinter
import pytest
class CheckerWrapper(object):
"""Little wrapper object for a MacroChecker.
Intended for use in making test assertions shorter and easier to read."""
def __init__(self):
self.ckr = MacroChecker(set([]))
def enabled(self, enabled_messages):
"""Updates the checker's enable message type set, from an iterable"""
self.ckr.enabled_messages = set(enabled_messages)
return self
def check(self, string):
return self.ckr.processString(string + '\n')
"""Checks a string (as if it were a file), outputs the results to the console, then returns the MacroFileChecker"""
f = self.ckr.processString(string + '\n')
ConsolePrinter().output(f)
return f
@pytest.fixture
def ckr():
"""Fixture - add an arg named ckr to your test function to automatically get one passed to you."""
return CheckerWrapper()
def replacement(ckr):
"""Returns the replacement text associated with the first message of a file checker"""
assert(len(ckr.messages) == 1)
from pprint import pprint
pprint(ckr.messages[0].script_location)
@ -49,9 +59,12 @@ def replacement(ckr):
def test_missing_macro(ckr):
"""Verify correct functioning of MessageId.MISSING_MACRO"""
ckr.enabled([MessageId.MISSING_MACRO])
# This should have a missing macro warning
assert(ckr.check('with vkFreeMemory by').numDiagnostics() == 1)
# These 3 should not have a missing macro warning because of their context (in a link)
assert(not ckr.check('<<VkObjectType').messages)
assert(not ckr.check('VkObjectType>>').messages)
assert(not ckr.check(
@ -64,6 +77,8 @@ def test_entity_detection(ckr):
assert(ckr.check('flink:abcd').numDiagnostics() == 1)
# Should just give BAD_ENTITY (an error), not MISSING_TEXT (a warning).
# Verifying that wrapping in asterisks (for formatting) doesn't get picked up as
# an asterisk in the entity name (a placeholder).
ckr.enabled(
[MessageId.MISSING_TEXT, MessageId.BAD_ENTITY])
assert(ckr.check('*flink:abcd*').numErrors() == 1)
@ -71,7 +86,10 @@ def test_entity_detection(ckr):
def test_wrong_macro(ckr):
ckr.enabled([MessageId.WRONG_MACRO])
# Should error - this ought to be code:uint32_t
assert(ckr.check('basetype:uint32_t').numErrors() == 1)
# This shouldn't error
assert(ckr.check('code:uint32_t').numErrors() == 0)
@ -83,15 +101,28 @@ def test_legacy(ckr):
def test_should_entity_be_text():
# These 5 are all examples of patterns that would merit usage of a ptext/etext/etc
# macro, for various reasons:
# has variable in subscript
assert(shouldEntityBeText('pBuffers[i]', '[i]'))
assert(shouldEntityBeText('maxPerStage*', None))
assert(shouldEntityBeText('VK_MEMORY_PLANE_[X]', '[X]'))
# has asterisk
assert(shouldEntityBeText('maxPerStage*', None))
# double-underscores make italicized placeholders
# (triple are double-underscores delimited by underscores...)
assert(shouldEntityBeText('VK_MEMORY_PLANE[__x__]', '[__x__]'))
assert(shouldEntityBeText('VK_MEMORY_PLANE___i___BIT_EXT', None))
# This shouldn't be a *text: macro because it only has single underscores
assert(False == shouldEntityBeText('VK_MEMORY_PLANE_i_BIT_EXT', None))
def test_misused_text(ckr):
# Tests the same patterns as test_should_entity_be_text(),
# but in a whole checker
ckr.enabled([MessageId.MISUSED_TEXT])
assert(ckr.check('etext:VK_MEMORY_PLANE_').numDiagnostics() == 0)
@ -102,32 +133,125 @@ def test_misused_text(ckr):
# Should be OK, since __i__ is a placeholder here
assert(ckr.check('etext:VK_MEMORY_PLANE___i___BIT_EXT').numDiagnostics() == 0)
# This shouldn't be a *text: macro because it only has single underscores
assert(ckr.check('VK_MEMORY_PLANE_i_BIT_EXT').numDiagnostics() == 0)
def test_extension(ckr):
ckr.enabled(set(MessageId))
expected_replacement = '`<<VK_NV_mesh_shader>>`'
# Check formatting of extension names:
# the following is the canonical way to refer to an extension
# (link wrapped in backticks)
expected_replacement='`<<VK_NV_mesh_shader>>`'
# Extension name mentioned without any markup, should be added
assert(ckr.check('asdf VK_NV_mesh_shader asdf').messages)
assert(replacement(ckr.check('asdf VK_NV_mesh_shader asdf'))
== expected_replacement)
# Extension name mentioned without any markup and wrong case,
# should be added and have case fixed
assert(ckr.check('asdf VK_NV_MESH_SHADER asdf').messages)
assert(replacement(ckr.check('asdf VK_NV_MESH_SHADER asdf'))
== expected_replacement)
# Extension name using wrong/old macro: ename isn't for extensions.
assert(ckr.check('asdf ename:VK_NV_mesh_shader asdf').messages)
assert(replacement(ckr.check('asdf ename:VK_NV_mesh_shader asdf'))
== expected_replacement)
# Extension name using wrong macro: elink isn't for extensions.
assert(ckr.check('asdf elink:VK_NV_mesh_shader asdf').messages)
assert(replacement(ckr.check('asdf elink:VK_NV_mesh_shader asdf'))
== expected_replacement)
# Extension name using wrong macro and wrong case: should have markup and case fixed
assert(ckr.check('asdf elink:VK_NV_MESH_SHADER asdf').messages)
assert(replacement(ckr.check('asdf elink:VK_NV_MESH_SHADER asdf'))
== expected_replacement)
# This shouldn't cause errors because this is how we want it to look.
assert(not ckr.check('asdf `<<VK_NV_mesh_shader>>` asdf').messages)
# This doesn't (shouldn't?) cause errors because just backticks on their own
# "escape" names from the "missing markup" tests.
assert(not ckr.check('asdf `VK_NV_mesh_shader` asdf').messages)
# TODO can we auto-correct this to add the backticks?
# Doesn't error now, but would be nice if it did...
assert(not ckr.check('asdf <<VK_NV_mesh_shader>> asdf').messages)
def test_refpage_tag(ckr):
ckr.enabled([MessageId.REFPAGE_TAG])
# Should error: missing refpage='' field
assert(ckr.check("[open,desc='',type='',xrefs='']").numErrors() == 1)
# Should error: missing desc='' field
assert(ckr.check("[open,refpage='',type='',xrefs='']").numErrors() == 1)
# Should error: missing type='' field
assert(ckr.check("[open,refpage='',desc='',xrefs='']").numErrors() == 1)
# Should not error: missing xrefs field is optional
assert(not ckr.check("[open,refpage='',desc='',type='']").messages)
def test_refpage_name(ckr):
ckr.enabled([MessageId.REFPAGE_NAME])
# Should not error: vkCreateInstance actually exists.
assert(ckr.check(
"[open,refpage='vkCreateInstance',desc='',type='']").numDiagnostics() == 0)
# Should error: vkBogus does not exist.
assert(
ckr.check("[open,refpage='vkBogus',desc='',type='']").numDiagnostics() == 1)
def test_refpage_missing_desc(ckr):
ckr.enabled([MessageId.REFPAGE_MISSING_DESC])
# Should not warn: non-empty description actually exists.
assert(ckr.check(
"[open,refpage='',desc='non-empty description',type='']").numDiagnostics() == 0)
# Should warn: desc field is empty.
assert(
ckr.check("[open,refpage='',desc='',type='']").numDiagnostics() == 1)
def test_refpage_type(ckr):
ckr.enabled([MessageId.REFPAGE_TYPE])
# Should not error: this is of type 'protos'.
assert(not ckr.check(
"[open,refpage='vkCreateInstance',desc='',type='protos']").messages)
# Should error: this is of type 'protos', not 'structs'.
assert(
ckr.check("[open,refpage='vkCreateInstance',desc='',type='structs']").messages)
def test_refpage_xrefs(ckr):
ckr.enabled([MessageId.REFPAGE_XREFS])
# Should not error: VkInstanceCreateInfo is a valid entity to have an xref to.
assert(not ckr.check(
"[open,refpage='vkCreateInstance',desc='',type='protos',xrefs='VkInstanceCreateInfo']").messages)
# case difference:
# should error but offer a replacement.
assert(ckr.check(
"[open,refpage='vkCreateInstance',desc='',type='protos',xrefs='vkInstanceCreateInfo']").numDiagnostics() == 1)
assert(replacement(ckr.check("[open,refpage='vkCreateInstance',desc='',type='protos',xrefs='vkInstanceCreateInfo']"))
== 'VkInstanceCreateInfo')
# Should error: not a valid entity.
assert(ckr.check(
"[open,refpage='xrCreateInstance',desc='',type='protos',xrefs='xrBogus']").numDiagnostics() == 1)
def test_refpage_xrefs_comma(ckr):
ckr.enabled([MessageId.REFPAGE_XREFS_COMMA])
# Should not error: no commas in the xrefs field
assert(not ckr.check(
"[open,refpage='vkCreateInstance',desc='',type='protos',xrefs='VkInstanceCreateInfo']").messages)
# Should error: commas shouldn't be there since it's space-delimited
assert(ckr.check(
"[open,refpage='vkCreateInstance',desc='',type='protos',xrefs='VkInstanceCreateInfo,']").numDiagnostics() == 1)

43
xml/vk.xml Normal file → Executable file
View File

@ -146,7 +146,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> 97</type>
#define <name>VK_HEADER_VERSION</name> 98</type>
<type category="define">
#define <name>VK_DEFINE_HANDLE</name>(object) typedef struct object##_T* object;</type>
@ -1985,7 +1985,7 @@ server.
<member><type>VkImageTiling</type> <name>tiling</name></member>
</type>
<type category="struct" name="VkPhysicalDeviceSparseImageFormatInfo2KHR" alias="VkPhysicalDeviceSparseImageFormatInfo2"/>
<type category="struct" name="VkPhysicalDevicePushDescriptorPropertiesKHR" structextends="VkPhysicalDeviceProperties2">
<type category="struct" name="VkPhysicalDevicePushDescriptorPropertiesKHR" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
<member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR"><type>VkStructureType</type> <name>sType</name></member>
<member><type>void</type>* <name>pNext</name></member>
<member><type>uint32_t</type> <name>maxPushDescriptors</name></member>
@ -2541,7 +2541,7 @@ server.
<member><type>uint32_t</type> <name>viewportCount</name></member>
<member len="viewportCount">const <type>VkViewportSwizzleNV</type>* <name>pViewportSwizzles</name></member>
</type>
<type category="struct" name="VkPhysicalDeviceDiscardRectanglePropertiesEXT" structextends="VkPhysicalDeviceProperties2">
<type category="struct" name="VkPhysicalDeviceDiscardRectanglePropertiesEXT" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
<member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT"><type>VkStructureType</type> <name>sType</name></member>
<member><type>void</type>* <name>pNext</name></member>
<member><type>uint32_t</type> <name>maxDiscardRectangles</name><comment>max number of active discard rectangles</comment></member>
@ -2762,7 +2762,7 @@ server.
<member><type>void</type>* <name>pNext</name></member>
<member><type>VkBool32</type> <name>protectedMemory</name></member>
</type>
<type category="struct" name="VkPhysicalDeviceProtectedMemoryProperties" structextends="VkPhysicalDeviceProperties2">
<type category="struct" name="VkPhysicalDeviceProtectedMemoryProperties" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
<member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES"><type>VkStructureType</type> <name>sType</name></member>
<member><type>void</type>* <name>pNext</name></member>
<member><type>VkBool32</type> <name>protectedNoFault</name></member>
@ -2894,7 +2894,7 @@ server.
<member optional="true"><type>VkPipelineCoverageModulationStateCreateFlagsNV</type> <name>flags</name></member>
<member><type>VkCoverageModulationModeNV</type> <name>coverageModulationMode</name></member>
<member><type>VkBool32</type> <name>coverageModulationTableEnable</name></member>
<member><type>uint32_t</type> <name>coverageModulationTableCount</name></member>
<member optional="true"><type>uint32_t</type> <name>coverageModulationTableCount</name></member>
<member noautovalidity="true" optional="true" len="coverageModulationTableCount">const <type>float</type>* <name>pCoverageModulationTable</name></member>
</type>
<type category="struct" name="VkImageFormatListCreateInfoKHR" structextends="VkImageCreateInfo,VkSwapchainCreateInfoKHR,VkPhysicalDeviceImageFormatInfo2">
@ -2939,7 +2939,7 @@ server.
<member><type>VkBool32</type> <name>shaderFloat16</name></member> <!-- 16-bit floats (halfs) in shaders -->
<member><type>VkBool32</type> <name>shaderInt8</name></member> <!-- 8-bit integers in shaders -->
</type>
<type category="struct" name="VkPhysicalDeviceFloatControlsPropertiesKHR" structextends="VkPhysicalDeviceProperties2">
<type category="struct" name="VkPhysicalDeviceFloatControlsPropertiesKHR" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
<member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES_KHR"><type>VkStructureType</type> <name>sType</name></member>
<member><type>void</type>* <name>pNext</name></member>
<member><type>VkBool32</type> <name>separateDenormSettings</name></member>
@ -3040,17 +3040,17 @@ server.
<member><type>VkExternalMemoryHandleTypeFlagBits</type> <name>handleType</name></member>
<member optional="false"><type>void</type>* <name>pHostPointer</name></member>
</type>
<type category="struct" name="VkMemoryHostPointerPropertiesEXT">
<type category="struct" name="VkMemoryHostPointerPropertiesEXT" returnedonly="true">
<member values="VK_STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT"><type>VkStructureType</type> <name>sType</name></member>
<member><type>void</type>* <name>pNext</name></member>
<member><type>uint32_t</type> <name>memoryTypeBits</name></member>
</type>
<type category="struct" name="VkPhysicalDeviceExternalMemoryHostPropertiesEXT" structextends="VkPhysicalDeviceProperties2">
<type category="struct" name="VkPhysicalDeviceExternalMemoryHostPropertiesEXT" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
<member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT"><type>VkStructureType</type> <name>sType</name></member>
<member><type>void</type>* <name>pNext</name></member>
<member><type>VkDeviceSize</type> <name>minImportedHostPointerAlignment</name></member>
</type>
<type category="struct" name="VkPhysicalDeviceConservativeRasterizationPropertiesEXT" structextends="VkPhysicalDeviceProperties2">
<type category="struct" name="VkPhysicalDeviceConservativeRasterizationPropertiesEXT" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
<member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT"><type>VkStructureType</type> <name>sType</name></member>
<member><type>void</type>* <name>pNext</name><comment>Pointer to next structure</comment></member>
<member><type>float</type> <name>primitiveOverestimationSize</name><comment>The size in pixels the primitive is enlarged at each edge during conservative rasterization</comment></member>
@ -3240,7 +3240,7 @@ server.
<member><type>uint32_t</type> <name>vertexBindingDivisorCount</name></member>
<member len="vertexBindingDivisorCount">const <type>VkVertexInputBindingDivisorDescriptionEXT</type>* <name>pVertexBindingDivisors</name></member>
</type>
<type category="struct" name="VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT" structextends="VkPhysicalDeviceProperties2">
<type category="struct" name="VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
<member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT"><type>VkStructureType</type> <name>sType</name></member>
<member><type>void</type>* <name>pNext</name></member>
<member><type>uint32_t</type> <name>maxVertexAttribDivisor</name><comment>max value of vertex attribute divisor</comment></member>
@ -3314,6 +3314,7 @@ server.
<member noautovalidity="true"><type>void</type>* <name>pNext</name></member>
<member><type>VkBool32</type> <name>vulkanMemoryModel</name></member>
<member><type>VkBool32</type> <name>vulkanMemoryModelDeviceScope</name></member>
<member><type>VkBool32</type> <name>vulkanMemoryModelAvailabilityVisibilityChains</name></member>
</type>
<type category="struct" name="VkPhysicalDeviceShaderAtomicInt64FeaturesKHR" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
<member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES_KHR"><type>VkStructureType</type> <name>sType</name></member>
@ -3479,7 +3480,7 @@ server.
<member><type>VkBool32</type> <name>taskShader</name></member>
<member><type>VkBool32</type> <name>meshShader</name></member>
</type>
<type category="struct" name="VkPhysicalDeviceMeshShaderPropertiesNV" structextends="VkPhysicalDeviceProperties2">
<type category="struct" name="VkPhysicalDeviceMeshShaderPropertiesNV" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
<member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_NV"><type>VkStructureType</type> <name>sType</name></member>
<member><type>void</type>* <name>pNext</name></member>
<member><type>uint32_t</type> <name>maxDrawMeshTasksCount</name></member>
@ -3592,7 +3593,7 @@ server.
<member><type>VkAccelerationStructureMemoryRequirementsTypeNV</type> <name>type</name></member>
<member><type>VkAccelerationStructureNV</type> <name>accelerationStructure</name></member>
</type>
<type category="struct" name="VkPhysicalDeviceRayTracingPropertiesNV" structextends="VkPhysicalDeviceProperties2">
<type category="struct" name="VkPhysicalDeviceRayTracingPropertiesNV" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
<member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_NV"><type>VkStructureType</type> <name>sType</name></member>
<member><type>void</type>* <name>pNext</name></member>
<member><type>uint32_t</type> <name>shaderGroupHandleSize</name></member>
@ -3604,7 +3605,7 @@ server.
<member><type>uint64_t</type> <name>maxTriangleCount</name></member>
<member><type>uint32_t</type> <name>maxDescriptorSetAccelerationStructures</name></member>
</type>
<type category="struct" name="VkDrmFormatModifierPropertiesListEXT" structextends="VkFormatProperties2">
<type category="struct" name="VkDrmFormatModifierPropertiesListEXT" returnedonly="true" structextends="VkFormatProperties2">
<member values="VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT"><type>VkStructureType</type> <name>sType</name></member>
<member><type>void</type>* <name>pNext</name></member>
<member optional="true"><type>uint32_t</type> <name>drmFormatModifierCount</name></member>
@ -6898,16 +6899,16 @@ server.
<proto><type>void</type> <name>vkCmdBeginTransformFeedbackEXT</name></proto>
<param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
<param><type>uint32_t</type> <name>firstCounterBuffer</name></param>
<param optional="false"><type>uint32_t</type> <name>counterBufferCount</name></param>
<param optional="true" len="counterBufferCount">const <type>VkBuffer</type>* <name>pCounterBuffers</name></param>
<param optional="true"><type>uint32_t</type> <name>counterBufferCount</name></param>
<param noautovalidity="true" len="counterBufferCount">const <type>VkBuffer</type>* <name>pCounterBuffers</name></param>
<param optional="true" len="counterBufferCount">const <type>VkDeviceSize</type>* <name>pCounterBufferOffsets</name></param>
</command>
<command queues="graphics" renderpass="inside" cmdbufferlevel="primary,secondary">
<proto><type>void</type> <name>vkCmdEndTransformFeedbackEXT</name></proto>
<param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
<param><type>uint32_t</type> <name>firstCounterBuffer</name></param>
<param optional="false"><type>uint32_t</type> <name>counterBufferCount</name></param>
<param optional="true" len="counterBufferCount">const <type>VkBuffer</type>* <name>pCounterBuffers</name></param>
<param optional="true"><type>uint32_t</type> <name>counterBufferCount</name></param>
<param noautovalidity="true" len="counterBufferCount">const <type>VkBuffer</type>* <name>pCounterBuffers</name></param>
<param optional="true" len="counterBufferCount">const <type>VkDeviceSize</type>* <name>pCounterBufferOffsets</name></param>
</command>
<command queues="graphics,compute" renderpass="both" cmdbufferlevel="primary,secondary">
@ -10088,7 +10089,7 @@ server.
</extension>
<extension name="VK_KHR_vulkan_memory_model" number="212" type="device" author="KHR" contact="Jeff Bolz @jeffbolznv" provisional="true" supported="vulkan">
<require>
<enum value="2" name="VK_KHR_VULKAN_MEMORY_MODEL_SPEC_VERSION"/>
<enum value="3" name="VK_KHR_VULKAN_MEMORY_MODEL_SPEC_VERSION"/>
<enum value="&quot;VK_KHR_vulkan_memory_model&quot;" name="VK_KHR_VULKAN_MEMORY_MODEL_EXTENSION_NAME"/>
<enum offset="0" extends="VkStructureType" name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES_KHR"/>
<type name="VkPhysicalDeviceVulkanMemoryModelFeaturesKHR"/>
@ -10366,5 +10367,11 @@ server.
<enum value="&quot;VK_NV_extension_250&quot;" name="VK_NV_EXTENSION_250_EXTENSION_NAME"/>
</require>
</extension>
<extension name="VK_NV_extension_251" number="251" author="NV" contact="Kedarnath Thangudu @kthangudu" supported="disabled">
<require>
<enum value="0" name="VK_NV_EXTENSION_251_SPEC_VERSION"/>
<enum value="&quot;VK_NV_extension_251&quot;" name="VK_NV_EXTENSION_251_EXTENSION_NAME"/>
</require>
</extension>
</extensions>
</registry>