Change log for May 12, 2017 Vulkan 1.0.49 spec update:

* Bump API patch number and header version number to 49 for this update.

Github Issues:

  * Modify reference page extraction script to make internal links to spec
    anchors refer to the core specification instead of being dangling links
    (public issue 455).
  * Fix GL_KHR_vulkan_glsl typo and add a nor-normative mapping to the newly
    published StorageBuffer class (public issue 466).
  * Both flink:vkEnumerateInstanceExtensionProperties and
    flink:vkEnumerateDeviceExtensionProperties return
    ename:VK_ERROR_LAYER_NOT_PRESENT, which covers the error case of an
    application providing a layer name that wasn't returned by
    ftext:vkEnumerate{Instance|Device}LayerProperties (public issue 487).
  * The specification for flink:VkApplicationInfo::apiVersion says that the
    driver must return ename:VK_ERROR_INCOMPATIBLE_DRIVER in the case that
    pname:apiVersion specifies a non-supported version. That means that the
    valid usage should not also state that, and so the VU statement is
    removed. The VU had language about "`an effective substitute`" that
    would have been lost, and so it was moved to the pname:apiVersion
    description (public issue 488).

Internal Issues:

  * Modify implicit validity generator script to assign asciidoc anchors to
    all valid usage statements it generates, and reflow.py script to insert
    Valid Usage ID (VUID) tags into the specification source files for
    explicit valid usage statements. This has no semantic effects on the
    specification, but will support the validation layer's detection of
    valid usage violations and allow it to link into the corresponding part
    of the specification (internal issue 583).
  * Assign VUID tags to all explicit VU statements and document
    the process and tag format in the style guide (internal issue 583).
  * Clarify the rules of whether to structure new functionality as instance
    extensions, device extensions, or both in the
    <<extended-functionality-instance-extensions-and-devices, Instance
    Extensions and Device Extensions>> section (internal issue 749).
  * Require that SPIR-V run-time arrays are only used with the
    code:BufferBlock decoration (internal issue 750).
  * Fix implicit and explicit valid usage statements for
    slink:VkWriteDescriptorSet::pname:dstSet (internal issue 767)
  * Fix SPIR-V code sample for ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER
    in the <<descriptorsets-uniformtexelbuffer, Uniform Texel Buffer>>
    section (internal issue 770).
  * Clarify that disabling depth testing also disables depth writes in the
    <<fragops-ds-state, Depth and Stencil Operations>> section (internal
    issue 775).
  * flink:VkDescriptorImageInfo::pname:imageLayout must match the actual
    imageLayout at the time the image is accessed. This was in the spec
    text, but needed an associated valid usage statement.
  * Note that only 32-bit atomic operations are supported in the
    <<spirvenv-module-validation, Validation Rules within a Module>>
    section.
  * Note that code:UniformConstant variables must not have initializers in
    the <<spirvenv-module-validation, Validation Rules within a Module>>
    section.
  * Add a new elink:VkObjectType enumeration to the core API, promoted from
    elink:VkDebugObjectTypeEXT, since it is used for much more than just the
    debug_report extension.

New Extensions:

  * `VK_KHR_get_surface_capabilities2`
  * `VK_KHR_shared_presentable_image`
This commit is contained in:
Jon Leech 2017-05-12 01:37:16 -07:00
parent 757a1232e6
commit 685295031d
83 changed files with 3182 additions and 1600 deletions

View File

@ -8,6 +8,75 @@ public issues.
-----------------------------------------------------
Change log for May 12, 2017 Vulkan 1.0.49 spec update:
* Bump API patch number and header version number to 49 for this update.
Github Issues:
* Modify reference page extraction script to make internal links to spec
anchors refer to the core specification instead of being dangling links
(public issue 455).
* Fix GL_KHR_vulkan_glsl typo and add a nor-normative mapping to the newly
published StorageBuffer class (public issue 466).
* Both flink:vkEnumerateInstanceExtensionProperties and
flink:vkEnumerateDeviceExtensionProperties return
ename:VK_ERROR_LAYER_NOT_PRESENT, which covers the error case of an
application providing a layer name that wasn't returned by
ftext:vkEnumerate{Instance|Device}LayerProperties (public issue 487).
* The specification for flink:VkApplicationInfo::apiVersion says that the
driver must return ename:VK_ERROR_INCOMPATIBLE_DRIVER in the case that
pname:apiVersion specifies a non-supported version. That means that the
valid usage should not also state that, and so the VU statement is
removed. The VU had language about "`an effective substitute`" that
would have been lost, and so it was moved to the pname:apiVersion
description (public issue 488).
Internal Issues:
* Modify implicit validity generator script to assign asciidoc anchors to
all valid usage statements it generates, and reflow.py script to insert
Valid Usage ID (VUID) tags into the specification source files for
explicit valid usage statements. This has no semantic effects on the
specification, but will support the validation layer's detection of
valid usage violations and allow it to link into the corresponding part
of the specification (internal issue 583).
* Assign VUID tags to all explicit VU statements and document
the process and tag format in the style guide (internal issue 583).
* Clarify the rules of whether to structure new functionality as instance
extensions, device extensions, or both in the
<<extended-functionality-instance-extensions-and-devices, Instance
Extensions and Device Extensions>> section (internal issue 749).
* Require that SPIR-V run-time arrays are only used with the
code:BufferBlock decoration (internal issue 750).
* Fix implicit and explicit valid usage statements for
slink:VkWriteDescriptorSet::pname:dstSet (internal issue 767)
* Fix SPIR-V code sample for ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER
in the <<descriptorsets-uniformtexelbuffer, Uniform Texel Buffer>>
section (internal issue 770).
* Clarify that disabling depth testing also disables depth writes in the
<<fragops-ds-state, Depth and Stencil Operations>> section (internal
issue 775).
* flink:VkDescriptorImageInfo::pname:imageLayout must match the actual
imageLayout at the time the image is accessed. This was in the spec
text, but needed an associated valid usage statement.
* Note that only 32-bit atomic operations are supported in the
<<spirvenv-module-validation, Validation Rules within a Module>>
section.
* Note that code:UniformConstant variables must not have initializers in
the <<spirvenv-module-validation, Validation Rules within a Module>>
section.
* Add a new elink:VkObjectType enumeration to the core API, promoted from
elink:VkDebugObjectTypeEXT, since it is used for much more than just the
debug_report extension.
New Extensions:
* `VK_KHR_get_surface_capabilities2`
* `VK_KHR_shared_presentable_image`
-----------------------------------------------------
Change log for April 15, 2017 Vulkan 1.0.48 spec update:
* Bump API patch number and header version number to 48 for this update.

View File

@ -33,8 +33,8 @@ Status
Version
Last Modified Date: 26-Mar-2017
Revision: 37
Last Modified Date: 14-Apr-2017
Revision: 39
Number
@ -325,7 +325,8 @@ Overview
uniform blockN { ... } ...; -> Uniform, with Block decoration
in / out variable -> Input/Output, possibly with block (below)
in / out block... -> Input/Output, with Block decoration
buffer blockN { ... } ...; -> Uniform, with BufferBlock decoration
buffer blockN { ... } ...; -> Uniform, with BufferBlock decoration, or
StorageBuffer, when requested
N/A -> AtomicCounter
shared -> Workgroup
<normal global> -> Private
@ -1002,7 +1003,7 @@ Changes to Chapter 5 of the OpenGL Shading Language Specification
layout(...) uniform texture2D t; // handle to a texture
in vec2 tCoord;
...
texture2D(sampler2D(t, s), tCoord);
texture(sampler2D(t, s), tCoord);
The result of a sampler constructor cannot be assigned to a variable:
@ -1357,6 +1358,9 @@ Revision History
Rev. Date Author Changes
---- ----------- ------- --------------------------------------------
39 14-Apr-2017 JohnK Update overview for StorageBuffer storage
class.
38 14-Apr-2017 JohnK Fix Vulkan public issue #466: texture2D typo.
37 26-Mar-2017 JohnK Fix glslang issue #369: remove gl_NumSamples.
36 13-Feb-2017 JohnK Fix public bug 428: allow anonymous
push_constant blocks.

View File

@ -70,6 +70,7 @@ GS_EXISTS := $(shell command -v gs 2> /dev/null)
# CHECKDIR - 'allchecks' target
OUTDIR := $(CURDIR)/../../../out/1.0
HTMLDIR := $(OUTDIR)/html
VUDIR := $(OUTDIR)/validation
PDFDIR := $(OUTDIR)/pdf
CHECKDIR := $(OUTDIR)/checks
@ -86,7 +87,7 @@ VERBOSE =
# $(EXTENSIONS))
# ADOCOPTS options for asciidoc->HTML5 output
NOTEOPTS = -a editing-notes -a implementation-guide
SPECREVISION = 1.0.48
SPECREVISION = 1.0.49
# Spell out RFC2822 format as not all date commands support -R
SPECDATE = $(shell echo `date -u "+%a, %d %b %Y %T %z"`)
@ -127,6 +128,9 @@ ADOCPDFEXTS = -r asciidoctor-pdf -r asciidoctor-mathematical
ADOCPDFOPTS = $(ADOCPDFEXTS) -a mathematical-format=svg \
-a imagesoutdir=$(PDFMATHDIR)
ADOCVUEXTS = -r $(CURDIR)/config/vu-to-json.rb
ADOCVUOPTS = $(ADOCVUEXTS)
.PHONY: directories
# Images used by the spec. These are included in generated HTML now.
@ -176,6 +180,11 @@ else
$(QUIET)mv $(PDFDIR)/vkspec-optimized.pdf $@
endif
validusage: $(VUDIR)/validusage.json $(SPECSRC) $(COMMONDOCS)
$(VUDIR)/validusage.json: $(SPECSRC) $(COMMONDOCS)
$(QUIET)$(MKDIR) $(VUDIR)
$(QUIET)$(ASCIIDOC) $(ADOCOPTS) $(ADOCVUOPTS) --trace -a json_output=$@ -o $@ $(SPECSRC)
# Vulkan Documentation and Extensions, a.k.a. "Style Guide" documentation
@ -276,7 +285,7 @@ manhtmlpages: man/apispec.txt $(MANHTML)
$(MANHTMLDIR)/%.html: KATEXDIR = ../../katex
$(MANHTMLDIR)/%.html: $(MANDIR)/%.txt $(MANCOPYRIGHT) $(GENINCLUDE) $(GENDEPENDS) katexinst
$(QUIET)$(MKDIR) $(MANHTMLDIR)
$(QUIET)$(ASCIIDOC) -b html5 -a cross-file-links $(ADOCOPTS) $(ADOCHTMLOPTS) -d manpage -o $@ $<
$(QUIET)$(ASCIIDOC) -b html5 -a cross-file-links -a html_spec_relative='../../html/vkspec.html' $(ADOCOPTS) $(ADOCHTMLOPTS) -d manpage -o $@ $<
# These targets are HTML5 and PDF single-file versions of the ref pages
@ -285,7 +294,7 @@ manpdf: $(OUTDIR)/apispec.pdf
$(OUTDIR)/apispec.pdf: $(SPECVERSION) man/apispec.txt $(MANSOURCES) $(MANCOPYRIGHT) $(SVGFILES) $(GENINCLUDE) $(GENDEPENDS)
$(QUIET)$(MKDIR) $(OUTDIR)
$(QUIET)$(MKDIR) $(PDFMATHDIR)
$(QUIET)$(ASCIIDOC) -b pdf $(ADOCOPTS) $(ADOCPDFOPTS) -o $@ man/apispec.txt
$(QUIET)$(ASCIIDOC) -b pdf -a html_spec_relative='html/vkspec.html' $(ADOCOPTS) $(ADOCPDFOPTS) -o $@ man/apispec.txt
ifndef GS_EXISTS
$(QUIET) echo "Warning: Ghostscript not installed, skipping pdf optimization"
else
@ -299,7 +308,7 @@ manhtml: $(OUTDIR)/apispec.html
$(OUTDIR)/apispec.html: KATEXDIR = katex
$(OUTDIR)/apispec.html: $(SPECVERSION) man/apispec.txt $(MANSOURCES) $(MANCOPYRIGHT) $(SVGFILES) $(GENINCLUDE) $(GENDEPENDS) katexinst
$(QUIET)$(MKDIR) $(OUTDIR)
$(QUIET)$(ASCIIDOC) -b html5 $(ADOCOPTS) $(ADOCHTMLOPTS) -o $@ man/apispec.txt
$(QUIET)$(ASCIIDOC) -b html5 -a html_spec_relative='html/vkspec.html' $(ADOCOPTS) $(ADOCHTMLOPTS) -o $@ man/apispec.txt
# Automated (though heuristic) checks of consistency in the spec and
# ref page sources

View File

@ -353,6 +353,7 @@ parts you don't use) completely before trying to install.
* Asciidoctor (asciidoctor, version: 1.5.5)
* Coderay (coderay, version 1.1.1)
* JSON Schema (json-schema, version 2.0.0)
* Asciidoctor PDF (asciidoctor-pdf, version: 1.5.0.alpha15)
* Asciidoctor Mathematical (asciidoctor-mathematical, version 0.2.2)
* https://github.com/asciidoctor/asciidoctor-mathematical#dependencies[Dependencies
@ -373,6 +374,10 @@ versions.
Only the `asciidoctor` and `coderay` gems are needed if you don't intend to
build PDF versions of the spec and supporting documents.
`json-schema` is only required in order to validate the output of the valid
usage extraction scripts to a JSON file.
If not installed, validation will be skipped when the JSON is built.
[NOTE]
.Note
====
@ -523,7 +528,7 @@ echo "2.3.3" > ~/.rbenv/version
# asciidoctor-mathematical also takes in excess of 20 min. to build!
# The same RUBY_CONFIGURE_OPTS advice above may apply here as well.
gem install asciidoctor coderay
gem install asciidoctor coderay json-schema
gem install --pre asciidoctor-pdf
MATHEMATICAL_SKIP_STRDUP=1 gem install asciidoctor-mathematical
----
@ -730,7 +735,7 @@ The following ruby gems can be installed directly via the `gem install`
command, once the platform is set up:
----
gem install rake asciidoctor coderay
gem install rake asciidoctor coderay json-schema
# Required only for pdf builds
MATHEMATICAL_SKIP_STRDUP=1 gem install asciidoctor-mathematical

View File

@ -0,0 +1,102 @@
// Copyright (c) 2017 The Khronos Group Inc.
// Copyright notice at https://www.khronos.org/registry/speccopyright.html
[[VK_KHR_get_surface_capabilities2]]
== VK_KHR_get_surface_capabilities2
*Name String*::
+VK_KHR_get_surface_capabilities2+
*Extension Type*::
Instance extension
*Registered Extension Number*::
120
*Last Modified Date*::
2017-02-27
*Revision*::
1
*IP Status*::
No known IP claims.
*Dependencies*::
- This extension is written against version 1.0 of the Vulkan API.
- This extension requires +VK_KHR_surface+.
*Contributors*::
- Ian Elliott, Google
- James Jones, NVIDIA
- Alon Or-bach, Samsung
*Contacts*::
- James Jones, NVIDIA
This extension provides new entry points to query device surface
capabilities in a way that can be easily extended by other extensions,
without introducing any further entry points.
This extension can be considered the <<VK_KHR_surface,VK_KHR_surface>>
equivalent of the <<VK_KHR_get_physical_device_properties2,
VK_KHR_get_physical_device_properties2>> extension.
=== New Object Types
None.
=== New Enum Constants
* Extending ename:VkStructureType:
** ename:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR
** ename:VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR
** ename:VK_STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR
=== New Enums
None.
=== New Structures
* slink:VkPhysicalDeviceSurfaceInfo2KHR
* slink:VkSurfaceCapabilities2KHR
* slink:VkSurfaceFormat2KHR
=== New Functions
* flink:vkGetPhysicalDeviceSurfaceCapabilities2KHR
* flink:vkGetPhysicalDeviceSurfaceFormats2KHR
=== Issues
1) What should this extension be named?
*RESOLVED*: VK_KHR_get_surface_capabilities2.
Other alternatives:
* VK_KHR_surface2
* One extension, combined with VK_KHR_get_display_properties2
2) Should additional WSI query functions be extended?
*RESOLVED*:
* flink:vkGetPhysicalDeviceSurfaceCapabilitiesKHR: Yes.
The need for this motivated the extension.
* flink:vkGetPhysicalDeviceSurfaceSupportKHR: No.
Currently only has boolean output.
Extensions should instead extend
flink:vkGetPhysicalDeviceSurfaceCapabilities2KHR.
* flink:vkGetPhysicalDeviceSurfaceFormatsKHR: Yes.
* flink:vkGetPhysicalDeviceSurfacePresentModesKHR: No.
Recent discussion concluded this introduced too much variability for
applications to deal with.
Extensions should instead extend
flink:vkGetPhysicalDeviceSurfaceCapabilities2KHR.
* flink:vkGetPhysicalDeviceXlibPresentationSupportKHR: Not in this
extension.
* flink:vkGetPhysicalDeviceXcbPresentationSupportKHR: Not in this
extension.
* flink:vkGetPhysicalDeviceWaylandPresentationSupportKHR: Not in this
extension.
* flink:vkGetPhysicalDeviceMirPresentationSupportKHR: Not in this
extension.
* flink:vkGetPhysicalDeviceWin32PresentationSupportKHR: Not in this
extension.
=== Version History
* Revision 1, 2017-02-27 (James Jones)
- Initial draft.

View File

@ -0,0 +1,164 @@
// Copyright (c) 2014-2017 The Khronos Group Inc.
// Copyright notice at https://www.khronos.org/registry/speccopyright.html
[[VK_KHR_shared_presentable_image]]
== VK_KHR_shared_presentable_image
*Name String*::
+VK_KHR_shared_presentable_image+
*Extension Type*::
Device extension
*Registered Extension Number*::
112
*Last Modified Date*::
2017-03-20
*Revision*::
1
*IP Status*::
No known IP claims.
*Dependencies*::
- This extension is written against version 1.0 of the Vulkan API.
- This extension requires +VK_KHR_swapchain+.
- This extension requires +VK_KHR_surface+.
- This extension requires +VK_KHR_get_physical_device_properties2+.
- This extension requires +VK_KHR_get_surface_capabilities2+.
*Contributors*::
- Alon Or-bach, Samsung Electronics
- Ian Elliott, Google
- Jesse Hall, Google
- Pablo Ceballos, Google
- Chris Forbes, Google
- Jeff Juliano, NVIDIA
- James Jones, NVIDIA
- Daniel Rakos, AMD
- Tobias Hector, Imagination Technologies
- Graham Connor, Imagination Technologies
- Michael Worcester, Imagination Technologies
- Cass Everitt, Oculus
- Johannes Van Waveren, Oculus
*Contacts*::
- Alon Or-bach, Samsung Electronics
This extension extends +VK_KHR_swapchain+ to enable creation of a shared
presentable image.
This allows the application to use the image while the presention engine is
accessing it, in order to reduce the latency between rendering and
presentation.
=== New Object Types
None.
=== New Enum Constants
* Extending ename:VkPresentModeKHR:
** ename:VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR
** ename:VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR
* Extending ename:VkImageLayout:
** ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR
* Extending ename:VkStructureType:
** ename:VK_STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR
=== New Enums
None.
=== New Structures
* slink:VkSharedPresentSurfaceCapabilitiesKHR
=== New Functions
* flink:vkGetSwapchainStatusKHR
=== Issues
1) Should we allow a Vulkan WSI swapchain to toggle between normal usage and
shared presentation usage?
*RESOLVED*: No.
WSI swapchains are typically recreated with new properties instead of having
their properties changed.
This can also save resources, assuming that fewer images are needed for
shared presentation, and assuming that most VR applications do not need to
switch between normal and shared usage.
2) Should we have a query for determining how the presentation engine
refresh is triggered?
*RESOLVED*: Yes.
This is done via which presentation modes a surface supports.
3) Should the object representing a shared presentable image be an extension
of a VkSwapchainKHR or a separate object?
*RESOLVED*: Extension of a swapchain due to overlap in creation properties
and to allow common functionality between shared and normal presentable
images and swapchains.
4) What should we call the extension and the new structures it creates?
*RESOLVED*: Shared presentable image / shared present.
5) Should the minImageCount and presentMode values of the
VkSwapchainCreateInfoKHR be ignored, or required to be compatible values?
*RESOLVED*: minImageCount must be set to 1, and presentMode should be set to
either VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR or
VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR.
6) What should the layout of the shared presentable image be?
*RESOLVED*: After acquiring the shared presentable image, the application
must transition it to the VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR layout prior to
it being used.
After this intial transition, any image usage that was requested during
swapchain creation can: be performed on the image without layout transitions
being performed.
7) Do we need a new API for the trigger to refresh new content?
*RESOLVED*: vkQueuePresentKHR to act as API to trigger a refresh, as will
allow combination with other compatible extensions to vkQueuePresentKHR.
8) How should an application detect a VK_ERROR_OUT_OF_DATE_KHR error on a
swapchain using the VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR present
mode?
*RESOLVED*: Introduce vkGetSwapchainStatusKHR to allow applications to query
the status of a swapchain using a shared presentation mode.
9) What should subsequent calls to vkQueuePresentKHR for CONTINUOUS_REFRESH
swapchains be defined to do?
*RESOLVED*: State that implementations may use it as a hint for updated
content.
10) Can the ownership of a shared presentable image be transferred to a
different queue?
*RESOLVED*: No.
It is not possible to transfer ownership of a shared presentable image
obtained from a swapchain created using VK_SHARING_MODE_EXCLUSIVE after it
has been presented.
11) How should vkQueueSubmit behave if a command buffer uses an image from
an OUT_OF_DATE swapchain?
*RESOLVED*: vkQueueSubmit is expected to return the VK_ERROR_DEVICE_LOST
error.
12) Can Vulkan provide any guarantee on the order of rendering, to enable
beam chasing?
*RESOLVED*: This could be achieved via use of render passes to ensure strip
rendering.
=== Version History
* Revision 1, 2017-03-20 (Alon Or-bach)
- Internal revisions

View File

@ -82,6 +82,10 @@ ifdef::VK_KHR_get_physical_device_properties2[]
include::VK_KHR_get_physical_device_properties2.txt[]
endif::VK_KHR_get_physical_device_properties2[]
ifdef::VK_KHR_get_surface_capabilities2[]
include::VK_KHR_get_surface_capabilities2.txt[]
endif::VK_KHR_get_surface_capabilities2[]
ifdef::VK_KHR_incremental_present[]
include::VK_KHR_incremental_present.txt[]
endif::VK_KHR_incremental_present[]
@ -104,6 +108,10 @@ ifdef::VK_KHR_shader_draw_parameters[]
include::VK_KHR_shader_draw_parameters.txt[]
endif::VK_KHR_shader_draw_parameters[]
ifdef::VK_KHR_shared_presentable_image[]
include::VK_KHR_shared_presentable_image.txt[]
endif::VK_KHR_shared_presentable_image[]
ifdef::VK_KHR_surface[]
include::VK_KHR_surface.txt[]
endif::VK_KHR_surface[]

View File

@ -918,6 +918,13 @@ Shader Module::
Shader Stage::
A stage of the graphics or compute pipeline that executes shader code.
ifdef::VK_KHR_shared_presentable_image[]
Shared presentable image::
A presentable image created from a swapchain with ename:VkPresentModeKHR
set to either ename:VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR or
ename:VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR.
endif::VK_KHR_shared_presentable_image[]
Side Effect::
A store to memory or atomic operation on memory from a shader
invocation.

View File

@ -201,6 +201,8 @@ following rules:
** *Device*
** *Workgroup*
** *Invocation*
* Variables declared in the *UniformConstant* storage class must: not have
initializers.
* The code:OriginLowerLeft execution mode must: not be used; fragment
entry points must: declare code:OriginUpperLeft.
* The code:PixelCenterInteger execution mode must: not be used.
@ -239,13 +241,16 @@ ifdef::VK_NV_viewport_array2[]
the vertex processing stages of a graphics pipeline.
endif::VK_NV_viewport_array2[]
* code:OpTypeRuntimeArray must: only be used for the last member of an
code:OpTypeStruct in the code:Uniform storage class.
code:OpTypeStruct that is in the code:Uniform storage class and is
decorated as code:BufferBlock.
* Linkage: See <<interfaces,Shader Interfaces>> for additional linking and
validation rules.
* Compute Shaders
** For each compute shader entry point, either a code:LocalSize execution
mode or an object decorated with the code:WorkgroupSize decoration
must: be specified.
* Atomic instructions must: declare a scalar 32-bit integer type for the
"`Result Type`".
[[spirvenv-precision-operation]]

View File

@ -33,7 +33,7 @@ include::../api/protos/vkDebugMarkerSetObjectNameEXT.txt[]
.Valid Usage
****
* pname:pNameInfo.object must: be a Vulkan object
* [[VUID-vkDebugMarkerSetObjectNameEXT-pNameInfo-01236]] pname:pNameInfo.object must: be a Vulkan object
****
include::../validity/protos/vkDebugMarkerSetObjectNameEXT.txt[]
@ -77,8 +77,8 @@ include::../api/protos/vkDebugMarkerSetObjectTagEXT.txt[]
.Valid Usage
****
* pname:pTagInfo.object must: be a Vulkan object
* pname:pTagInfo.tagName must: not be `0`
* [[VUID-vkDebugMarkerSetObjectTagEXT-pTagInfo-01237]] pname:pTagInfo.object must: be a Vulkan object
* [[VUID-vkDebugMarkerSetObjectTagEXT-pTagInfo-01238]] pname:pTagInfo.tagName must: not be `0`
****
include::../validity/protos/vkDebugMarkerSetObjectTagEXT.txt[]
@ -171,10 +171,10 @@ must: be matched and balanced.
.Valid Usage
****
* There must: be an outstanding flink:vkCmdDebugMarkerBeginEXT command
* [[VUID-vkCmdDebugMarkerEndEXT-commandBuffer-01239]] There must: be an outstanding flink:vkCmdDebugMarkerBeginEXT command
prior to the fname:vkCmdDebugMarkerEndEXT on the queue that
pname:commandBuffer is submitted to
* If pname:commandBuffer is a secondary command buffer, there must: be an
* [[VUID-vkCmdDebugMarkerEndEXT-commandBuffer-01240]] If pname:commandBuffer is a secondary command buffer, there must: be an
outstanding flink:vkCmdDebugMarkerBeginEXT command recorded to
pname:commandBuffer that has not previously been ended by a call to
flink:vkCmdDebugMarkerEndEXT.

View File

@ -244,7 +244,7 @@ registered.
.Valid Usage
****
* pname:object must: be a Vulkan object or ename:VK_NULL_HANDLE
* [[VUID-vkDebugReportMessageEXT-object-01241]] pname:object must: be a Vulkan object or ename:VK_NULL_HANDLE
****
include::../validity/protos/vkDebugReportMessageEXT.txt[]
@ -260,9 +260,9 @@ include::../api/protos/vkDestroyDebugReportCallbackEXT.txt[]
.Valid Usage
****
* If sname:VkAllocationCallbacks were provided when pname:instance was
* [[VUID-vkDestroyDebugReportCallbackEXT-instance-01242]] If sname:VkAllocationCallbacks were provided when pname:instance was
created, a compatible set of callbacks must: be provided here
* If no sname:VkAllocationCallbacks were provided when pname:instance was
* [[VUID-vkDestroyDebugReportCallbackEXT-instance-01243]] If no sname:VkAllocationCallbacks were provided when pname:instance was
created, pname:pAllocator must: be `NULL`
****

View File

@ -14,7 +14,7 @@ include::../../api/structs/VkSwapchainCounterCreateInfoEXT.txt[]
.Valid Usage
****
* The bits in pname:surfaceCounters must: be supported by
* [[VUID-VkSwapchainCounterCreateInfoEXT-surfaceCounters-01244]] The bits in pname:surfaceCounters must: be supported by
slink:VkSwapchainCreateInfoKHR::pname:surface, as reported by
flink:vkGetPhysicalDeviceSurfaceCapabilities2EXT.
****
@ -39,7 +39,7 @@ implementation may: return VK_ERROR_OUT_OF_DATE_KHR.
.Valid Usage
****
* One or more present commands on pname:swapchain must: have been
* [[VUID-vkGetSwapchainCounterEXT-swapchain-01245]] One or more present commands on pname:swapchain must: have been
processed by the presentation engine.
****

View File

@ -37,7 +37,7 @@ The remaining members are:
.Valid Usage
****
* pname:supportedSurfaceCounters must: not include
* [[VUID-VkSurfaceCapabilities2EXT-supportedSurfaceCounters-01246]] pname:supportedSurfaceCounters must: not include
ename:VK_SURFACE_COUNTER_VBLANK_EXT unless the surface queried is a
<<wsi-display-surfaces,display surface>>.
****

View File

@ -12,7 +12,7 @@ at the next fname:vkQueuePresentKHR call using that sname:VkSwapchainKHR
object.
The metadata will persist until a subsequent fname:vkSetHdrMetadataEXT
changes it.
The defintions below are from the associated SMPTE 2086, CTA 861.3 and CIE
The definitions below are from the associated SMPTE 2086, CTA 861.3 and CIE
15:2004 specifications.
The definition of fname:vkSetHdrMetadataEXT is:

View File

@ -30,7 +30,7 @@ include::../../api/structs/VkPresentTimesInfoGOOGLE.txt[]
.Valid Usage
****
* pname:swapchainCount must: be the same value as
* [[VUID-VkPresentTimesInfoGOOGLE-swapchainCount-01247]] pname:swapchainCount must: be the same value as
sname:VkPresentInfoKHR::pname:swapchainCount, where
sname:VkPresentInfoKHR is in the pname:pNext chain of this
sname:VkPresentTimesInfoGOOGLE structure.

View File

@ -63,7 +63,7 @@ include::../../api/structs/VkAndroidSurfaceCreateInfoKHR.txt[]
.Valid Usage
****
* pname:window must: point to a valid Android code:ANativeWindow.
* [[VUID-VkAndroidSurfaceCreateInfoKHR-window-01248]] pname:window must: point to a valid Android code:ANativeWindow.
****
include::../../validity/structs/VkAndroidSurfaceCreateInfoKHR.txt[]

View File

@ -189,7 +189,7 @@ available values were returned.
.Valid Usage
****
* pname:planeIndex must: be less than the number of display planes
* [[VUID-vkGetDisplayPlaneSupportedDisplaysKHR-planeIndex-01249]] pname:planeIndex must: be less than the number of display planes
supported by the device as determined by calling
fname:vkGetPhysicalDeviceDisplayPlanePropertiesKHR
****
@ -308,9 +308,9 @@ include::../../api/structs/VkDisplayModeCreateInfoKHR.txt[]
.Valid Usage
****
* The pname:width and pname:height members of the pname:visibleRegion
* [[VUID-VkDisplayModeCreateInfoKHR-width-01250]] The pname:width and pname:height members of the pname:visibleRegion
member of pname:parameters must: be greater than `0`
* The pname:refreshRate member of pname:parameters must: be greater than
* [[VUID-VkDisplayModeCreateInfoKHR-refreshRate-01251]] The pname:refreshRate member of pname:parameters must: be greater than
`0`
****
@ -465,10 +465,10 @@ to a display surface.
.Valid Usage
****
* pname:planeIndex must: be less than the number of display planes
* [[VUID-VkDisplaySurfaceCreateInfoKHR-planeIndex-01252]] pname:planeIndex must: be less than the number of display planes
supported by the device as determined by calling
fname:vkGetPhysicalDeviceDisplayPlanePropertiesKHR
* If the pname:planeReorderPossible member of the
* [[VUID-VkDisplaySurfaceCreateInfoKHR-planeReorderPossible-01253]] If the pname:planeReorderPossible member of the
sname:VkDisplayPropertiesKHR structure returned by
fname:vkGetPhysicalDeviceDisplayPropertiesKHR for the display
corresponding to pname:displayMode is ename:VK_TRUE then
@ -479,13 +479,13 @@ to a display surface.
sname:VkDisplayPlanePropertiesKHR returned by
fname:vkGetPhysicalDeviceDisplayPlanePropertiesKHR for the display plane
corresponding to pname:displayMode
* If pname:alphaMode is ename:VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR then
* [[VUID-VkDisplaySurfaceCreateInfoKHR-alphaMode-01254]] If pname:alphaMode is ename:VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR then
pname:globalAlpha must: be between `0` and `1`, inclusive
* pname:alphaMode must: be `0` or one of the bits present in the
* [[VUID-VkDisplaySurfaceCreateInfoKHR-alphaMode-01255]] pname:alphaMode must: be `0` or one of the bits present in the
pname:supportedAlpha member of sname:VkDisplayPlaneCapabilitiesKHR
returned by fname:vkGetDisplayPlaneCapabilitiesKHR for the display plane
corresponding to pname:displayMode
* The pname:width and pname:height members of pname:imageExtent must: be
* [[VUID-VkDisplaySurfaceCreateInfoKHR-width-01256]] The pname:width and pname:height members of pname:imageExtent must: be
less than the pname:maxImageDimensions2D member of
sname:VkPhysicalDeviceLimits
****

View File

@ -48,12 +48,12 @@ presented pixels will be scaled accordingly.
.Valid Usage
****
* pname:srcRect must: specify a rectangular region that is a subset of the
* [[VUID-VkDisplayPresentInfoKHR-srcRect-01257]] pname:srcRect must: specify a rectangular region that is a subset of the
image being presented
* pname:dstRect must: specify a rectangular region that is a subset of the
* [[VUID-VkDisplayPresentInfoKHR-dstRect-01258]] pname:dstRect must: specify a rectangular region that is a subset of the
pname:visibleRegion parameter of the display mode the swapchain being
presented uses
* If the pname:persistentContent member of the
* [[VUID-VkDisplayPresentInfoKHR-persistentContent-01259]] If the pname:persistentContent member of the
sname:VkDisplayPropertiesKHR structure returned by
fname:vkGetPhysicalDeviceDisplayPropertiesKHR for the display the
present operation targets then pname:persistent must: be ename:VK_FALSE

View File

@ -32,7 +32,7 @@ include::../../api/structs/VkPresentRegionsKHR.txt[]
.Valid Usage
****
* pname:swapchainCount must: be the same value as
* [[VUID-VkPresentRegionsKHR-swapchainCount-01260]] pname:swapchainCount must: be the same value as
sname:VkPresentInfoKHR::pname:swapchainCount, where
sname:VkPresentInfoKHR is in the pNext-chain of this
sname:VkPresentRegionsKHR structure.
@ -73,10 +73,10 @@ include::../../api/structs/VkRectLayerKHR.txt[]
.Valid Usage
****
* The sum of pname:offset and pname:extent must: be no greater than the
* [[VUID-VkRectLayerKHR-offset-01261]] The sum of pname:offset and pname:extent must: be no greater than the
pname:imageExtent member of the sname:VkSwapchainCreateInfoKHR structure
given to flink:vkCreateSwapchainKHR.
* pname:layer must: be less than pname:imageArrayLayers member of the
* [[VUID-VkRectLayerKHR-layer-01262]] pname:layer must: be less than pname:imageArrayLayers member of the
sname:VkSwapchainCreateInfoKHR structure given to
flink:vkCreateSwapchainKHR.
****

View File

@ -38,8 +38,8 @@ include::../../api/structs/VkMirSurfaceCreateInfoKHR.txt[]
.Valid Usage
****
* pname:connection must: point to a valid code:MirConnection.
* pname:surface must: point to a valid code:MirSurface.
* [[VUID-VkMirSurfaceCreateInfoKHR-connection-01263]] pname:connection must: point to a valid code:MirConnection.
* [[VUID-VkMirSurfaceCreateInfoKHR-surface-01264]] pname:surface must: point to a valid code:MirSurface.
****
include::../../validity/structs/VkMirSurfaceCreateInfoKHR.txt[]

View File

@ -21,7 +21,7 @@ This platform-specific function can: be called prior to creating a surface.
.Valid Usage
****
* pname:queueFamilyIndex must: be less than
* [[VUID-vkGetPhysicalDeviceMirPresentationSupportKHR-queueFamilyIndex-01265]] pname:queueFamilyIndex must: be less than
pname:pQueueFamilyPropertyCount returned by
fname:vkGetPhysicalDeviceQueueFamilyProperties for the given
pname:physicalDevice

View File

@ -0,0 +1,79 @@
// Copyright (c) 2014-2017 The Khronos Group Inc.
// Copyright notice at https://www.khronos.org/registry/speccopyright.html
If a swapchain is created with pname:presentMode set to either
ename:VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR or
ename:VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR, a single presentable
image can: be acquired, referred to as a shared presentable image.
A shared presentable image may: be concurrently accessed by the application
and the presentation engine, without transitioning the image's layout after
it is initially presented.
* With ename:VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR, the presentation
engine is only required to update to the latest contents of a shared
presentable image after a present.
The application must: call fname:vkQueuePresentKHR to guarantee an
update.
However, the presentation engine may: update from it at any time.
* With ename:VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR, the
presentation engine will automatically present the latest contents of a
shared presentable image during every refresh cycle.
The application is only required to make one initial call to
fname:vkQueuePresentKHR, after which the presentation engine will update
from it without any need for further present calls.
The application can: indicate the image contents have been updated by
calling fname:vkQueuePresentKHR, but this does not guarantee the timing
of when updates will occur.
The presentation engine may: access a shared presentable image at any time
after it is first presented.
To avoid tearing, an application should: coordinate access with the
presentation engine.
This requires presentation engine timing information through
platform-specific mechanisms and ensuring that color attachment writes are
made available during the portion of the presentation engines refresh cycle
they are intended for.
[NOTE]
.Note
====
The +VK_KHR_shared_presentable_image+ extension does not provide
functionality for determining the timing of the presentation engine's
refresh cycles.
====
// refBegin vkGetSwapchainStatusKHR - Get a swapchain's status
In order to query a swapchain's status when rendering to a shared
presentable image, call:
include::../../api/protos/vkGetSwapchainStatusKHR.txt[]
* pname:device is the device associated with pname:swapchain.
* pname:swapchain is the swapchain to query.
include::../../validity/protos/vkGetSwapchainStatusKHR.txt[]
The possible return values for fname:vkGetSwapchainStatusKHR() should: be
interpreted as follows:
* ename:VK_SUCCESS indicates the presentation engine is presenting the
contents of the shared presentable image, as per the swapchain's
ename:VkPresentModeKHR.
* ename:VK_SUBOPTIMAL_KHR the swapchain no longer matches the surface
properties exactly, but the presentation engine is presenting the
contents of the shared presentable image, as per the swapchain's
ename:VkPresentModeKHR.
* ename:VK_ERROR_OUT_OF_DATE_KHR the surface has changed in such a way
that it is no longer compatible with the swapchain.
* ename:VK_ERROR_SURFACE_LOST_KHR the surface is no longer available.
[NOTE]
.Note
====
The swapchain state may: be cached by implementations, so applications
should: regularly call fname:vkGetSwapchainStatusKHR when using a swapchain
with ename:VkPresentModeKHR set to
ename:VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR.
====

View File

@ -151,11 +151,11 @@ closing a window, or similar behavior.
.Valid Usage
****
* All sname:VkSwapchainKHR objects created for pname:surface must: have
* [[VUID-vkDestroySurfaceKHR-surface-01266]] All sname:VkSwapchainKHR objects created for pname:surface must: have
been destroyed prior to destroying pname:surface
* If sname:VkAllocationCallbacks were provided when pname:surface was
* [[VUID-vkDestroySurfaceKHR-surface-01267]] If sname:VkAllocationCallbacks were provided when pname:surface was
created, a compatible set of callbacks must: be provided here
* If no sname:VkAllocationCallbacks were provided when pname:surface was
* [[VUID-vkDestroySurfaceKHR-surface-01268]] If no sname:VkAllocationCallbacks were provided when pname:surface was
created, pname:pAllocator must: be `NULL`
****
@ -192,7 +192,7 @@ include::../../api/protos/vkGetPhysicalDeviceSurfaceSupportKHR.txt[]
.Valid Usage
****
* pname:queueFamilyIndex must: be less than
* [[VUID-vkGetPhysicalDeviceSurfaceSupportKHR-queueFamilyIndex-01269]] pname:queueFamilyIndex must: be less than
pname:pQueueFamilyPropertyCount returned by
fname:vkGetPhysicalDeviceQueueFamilyProperties for the given
pname:physicalDevice
@ -309,10 +309,28 @@ include::../../api/structs/VkSurfaceCapabilitiesKHR.txt[]
that all pixels in the presentable images have an alpha value of 1.0.
* pname:supportedUsageFlags is a bitmask of elink:VkImageUsageFlagBits
representing the ways the application can: use the presentable images of
a swapchain created for the surface on the specified device.
a swapchain created
ifdef::VK_KHR_shared_presentable_image[]
with ename:VkPresentModeKHR set to ename:VK_PRESENT_MODE_IMMEDIATE_KHR,
ename:VK_PRESENT_MODE_MAILBOX_KHR, ename:VK_PRESENT_MODE_FIFO_KHR or
ename:VK_PRESENT_MODE_FIFO_RELAXED_KHR
endif::VK_KHR_shared_presentable_image[]
for the surface on the specified device.
ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT must: be included in the set
but implementations may: support additional usages.
ifdef::VK_KHR_shared_presentable_image[]
[NOTE]
.Note
====
Supported usage flags of a presentable image when using
ename:VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR or
ename:VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR presentation mode are
provided by
slink:VkSharedPresentSurfaceCapabilitiesKHR::pname:sharedPresentSupportedUsageFlags.
====
endif::VK_KHR_shared_presentable_image[]
[NOTE]
.Note
====
@ -322,6 +340,88 @@ pname:maxImageCount may: be zero.
include::../../validity/structs/VkSurfaceCapabilitiesKHR.txt[]
ifdef::VK_KHR_get_surface_capabilities2[]
// refBegin vkGetPhysicalDeviceSurfaceCapabilities2KHR Reports capabilities of a surface on a physical device
To query the basic capabilities of a surface defined by the core or
extensions, call:
include::../../api/protos/vkGetPhysicalDeviceSurfaceCapabilities2KHR.txt[]
* pname:physicalDevice is the physical device that will be associated with
the swapchain to be created, as described for
flink:vkCreateSwapchainKHR.
* pname:pSurfaceInfo points to an instance of the
slink:VkPhysicalDeviceSurfaceInfo2KHR structure, describing the surface
and other fixed parameters that would be consumed by
flink:vkCreateSwapchainKHR.
* pname:pSurfaceCapabilities points to an instance of the
slink:VkSurfaceCapabilities2KHR structure in which the capabilities are
returned.
fname:vkGetPhysicalDeviceSurfaceCapabilities2KHR behaves similarly to
flink:vkGetPhysicalDeviceSurfaceCapabilitiesKHR, with the ability to specify
extended inputs via chained input structures, and to return extended
information via chained output structures.
include::../../validity/protos/vkGetPhysicalDeviceSurfaceCapabilities2KHR.txt[]
//refBegin VkPhysicalDeviceSurfaceInfo2KHR Structure specifying a surface and related swapchain creation parameters
The sname:VkPhysicalDeviceSurfaceInfo2KHR strucutre is defined as:
include::../../api/structs/VkPhysicalDeviceSurfaceInfo2KHR.txt[]
* pname:sType is the type of this structure.
* pname:pNext is `NULL` or a pointer to an extension-specific structure.
* pname:surface is the surface that will be associated with the swapchain.
The members of sname:VkPhysicalDeviceSurfaceInfo2KHR correspond to the
arguments to flink:vkGetPhysicalDeviceSurfaceCapabilities, with pname:sType
and pname:pNext added for extensibility.
include::../../validity/structs/VkPhysicalDeviceSurfaceInfo2KHR.txt[]
// refBegin VkSurfaceCapabilities2KHR Structure describing capabilities of a surface
The sname:VkSurfaceCapabilities2KHR structure is defined as:
include::../../api/structs/VkSurfaceCapabilities2KHR.txt[]
* pname:sType is the type of this structure.
* pname:pNext is `NULL` or a pointer to an extension-specific structure.
* pname:surfaceCapabilities is a structure of type
slink:VkSurfaceCapabilitiesKHR describing the capabilities of the
specified surface.
include::../../validity/structs/VkSurfaceCapabilities2KHR.txt[]
ifdef::VK_KHR_shared_presentable_image[]
// refBegin VkSharedPresentSurfaceCapabilitiesKHR - structure describing capabilities of a surface for shared presentation
The sname:VkSharedPresentSurfaceCapabilitiesKHR structure is defined as:
include::../../api/structs/VkSharedPresentSurfaceCapabilitiesKHR.txt[]
* pname:sType is the type of this structure.
* pname:pNext is `NULL` or a pointer to an extension-specific structure.
* pname:sharedPresentSupportedUsageFlags is a bitmask of
elink:VkImageUsageFlagBits representing the ways the application can:
use the shared presentable image from a swapchain created with
ename:VkPresentModeKHR set to
ename:VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR or
ename:VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR for the surface on
the specified device.
ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT must: be included in the set
but implementations may: support additional usages.
include::../../validity/structs/VkSharedPresentSurfaceCapabilitiesKHR.txt[]
// refEnd VkSharedPresentSurfaceCapabilitiesKHR
endif::VK_KHR_shared_presentable_image[]
endif::VK_KHR_get_surface_capabilities2[]
ifdef::VK_EXT_display_surface_counter[]
include::../VK_EXT_display_surface_counter/surface_capabilities.txt[]
endif::VK_EXT_display_surface_counter[]
@ -441,6 +541,60 @@ include::../../api/structs/VkSurfaceFormatKHR.txt[]
include::../../validity/structs/VkSurfaceFormatKHR.txt[]
ifdef::VK_KHR_get_surface_capabilities2[]
// refBegin vkGetPhysicalDeviceSurfaceFormats2KHR - Query color formats supported by surface
To query the supported swapchain format tuples for a surface, call:
include::../../api/protos/vkGetPhysicalDeviceSurfaceFormats2KHR.txt[]
* pname:physicalDevice is the physical device that will be associated with
the swapchain to be created, as described for
flink:vkCreateSwapchainKHR.
* pname:pSurfaceInfo points to an instance of the
slink:VkPhysicalDeviceSurfaceInfo2KHR structure, describing the surface
and other fixed parameters that would be consumed by
flink:vkCreateSwapchainKHR.
* pname:pSurfaceFormatCount is a pointer to an integer related to the
number of format tuples available or queried, as described below.
* pname:pSurfaceFormats is either `NULL` or a pointer to an array of
slink:VkSurfaceFormat2KHR structures.
If pname:pSurfaceFormats is `NULL`, then the number of format tuples
supported for the given pname:surface is returned in
pname:pSurfaceFormatCount.
The number of format tuples supported will be greater than or equal to 1.
Otherwise, pname:pSurfaceFormatCount must: point to a variable set by the
user to the number of elements in the pname:pSurfaceFormats array, and on
return the variable is overwritten with the number of structures actually
written to pname:pSurfaceFormats.
If the value of pname:pSurfaceFormatCount is less than the number of format
tuples supported, at most pname:pSurfaceFormatCount structures will be
written.
If pname:pSurfaceFormatCount is smaller than the number of format tuples
supported for the surface parameters described in pname:pSurfaceInfo,
ename:VK_INCOMPLETE will be returned instead of ename:VK_SUCCESS to indicate
that not all the available values were returned.
include::../../validity/protos/vkGetPhysicalDeviceSurfaceFormats2KHR.txt[]
// refBegin VkSurfaceFormat2KHR - Structure describing a supported swapchain format tuple
The sname:VkSurfaceFormat2KHR structure is defined as:
include::../../api/structs/VkSurfaceFormat2KHR.txt[]
* pname:sType is the type of this structure.
* pname:pNext is `NULL` or a pointer to an extension-specific structure.
* pname:surfaceFormat is an instance of slink:VkSurfaceFormatKHR
describing a format-color space pair that is compatible with the
specified surface.
include::../../validity/structs/VkSurfaceFormat2KHR.txt[]
endif::VK_KHR_get_surface_capabilities2[]
While the pname:format of a presentable image refers to the encoding of each
pixel, the pname:colorSpace determines how the presentation engine
interprets the pixel values.
@ -790,6 +944,46 @@ include::../../api/enums/VkPresentModeKHR.txt[]
New requests are appended to the end of the queue, and one request is
removed from the beginning of the queue and processed during or after
each vertical blanking period in which the queue is non-empty.
ifdef::VK_KHR_shared_presentable_image[]
* ename:VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR: The presentation engine
and application have concurrent access to a single image, which is
referred to as a _shared presentable image_.
The presentation engine is only required to update the current image
after a new presentation request is received.
Therefore the application must: make a presentation request whenever an
update is required.
However, the presentation engine may: update the current image at any
point, meaning this mode may: result in visible tearing.
* ename:VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR: The presentation
engine and application have concurrent access to a single image, which
is referred to as a _shared presentable image_.
The presentation engine periodically updates the current image on its
regular refresh cycle.
The application is only required to make one initial presentation
request, after which the presentation engine must: update the current
image without any need for further presentation requests.
The application can: indicate the image contents have been updated by
making a presentation request, but this does not guarantee the timing of
when it will be updated.
This mode may: result in visible tearing if rendering to the image is
not timed correctly.
The supported elink:VkImageUsageFlagBits of the presentable images of a
swapchain created for a surface may: differ depending on the presentation
mode, and can be determined as per the table below:
.Presentable image usage queries
[width="100%",cols="<50%,<50%",options="header"]
|====
| Presentation mode | Image usage flags
| ename:VK_PRESENT_MODE_IMMEDIATE_KHR | slink:VkSurfaceCapabilitiesKHR::pname:supportedUsageFlags
| ename:VK_PRESENT_MODE_MAILBOX_KHR | slink:VkSurfaceCapabilitiesKHR::pname:supportedUsageFlags
| ename:VK_PRESENT_MODE_FIFO_KHR | slink:VkSurfaceCapabilitiesKHR::pname:supportedUsageFlags
| ename:VK_PRESENT_MODE_FIFO_RELAXED_KHR | slink:VkSurfaceCapabilitiesKHR::pname:supportedUsageFlags
| ename:VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR | slink:VkSharedPresentSurfaceCapabilitiesKHR::pname:sharedPresentSupportedUsageFlags
| ename:VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR | slink:VkSharedPresentSurfaceCapabilitiesKHR::pname:sharedPresentSupportedUsageFlags
|====
endif::VK_KHR_shared_presentable_image[]
[NOTE]
.Note

View File

@ -74,6 +74,10 @@ rather than in its main loop.
How this all works is described below.
ifdef::VK_KHR_shared_presentable_image[]
include::../VK_KHR_shared_presentable_image/wsi.txt[]
endif::VK_KHR_shared_presentable_image[]
// refBegin vkCreateSwapchainKHR - Create a swapchain
To create a swapchain, call:
@ -200,50 +204,73 @@ effects that require them to run for all pixels in the presentable image.
However, the application cannot: acquire any more images from the old
swapchain regardless of whether or not creation of the new swapchain
succeeds.
ifdef::VK_KHR_shared_presentable_image[]
The application can: continue to use a shared presentable image obtained
from pname:oldSwapchain until a presentable image is acquired from the
new swapchain, as long as it has not entered a state that causes it to
return ename:VK_ERROR_OUT_OF_DATE_KHR.
endif::VK_KHR_shared_presentable_image[]
.Valid Usage
****
* pname:surface must: be a surface that is supported by the device as
* [[VUID-VkSwapchainCreateInfoKHR-surface-01270]] pname:surface must: be a surface that is supported by the device as
determined using fname:vkGetPhysicalDeviceSurfaceSupportKHR
* pname:minImageCount must: be greater than or equal to the value returned
* [[VUID-VkSwapchainCreateInfoKHR-minImageCount-01271]] pname:minImageCount must: be greater than or equal to the value returned
in the pname:minImageCount member of the sname:VkSurfaceCapabilitiesKHR
structure returned by fname:vkGetPhysicalDeviceSurfaceCapabilitiesKHR
for the surface
* pname:minImageCount must: be less than or equal to the value returned in
* [[VUID-VkSwapchainCreateInfoKHR-minImageCount-01272]] pname:minImageCount must: be less than or equal to the value returned in
the pname:maxImageCount member of the sname:VkSurfaceCapabilitiesKHR
structure returned by fname:vkGetPhysicalDeviceSurfaceCapabilitiesKHR
for the surface if the returned pname:maxImageCount is not zero
* pname:imageFormat and pname:imageColorSpace must: match the pname:format
ifdef::VK_KHR_shared_presentable_image[]
* [[VUID-VkSwapchainCreateInfoKHR-minImageCount-01383]] pname:minImageCount must: be `1` if pname:presentMode is either
ename:VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR or
ename:VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR
endif::VK_KHR_shared_presentable_image[]
* [[VUID-VkSwapchainCreateInfoKHR-imageFormat-01273]] pname:imageFormat and pname:imageColorSpace must: match the pname:format
and pname:colorSpace members, respectively, of one of the
sname:VkSurfaceFormatKHR structures returned by
fname:vkGetPhysicalDeviceSurfaceFormatsKHR for the surface
* pname:imageExtent must: be between pname:minImageExtent and
* [[VUID-VkSwapchainCreateInfoKHR-imageExtent-01274]] pname:imageExtent must: be between pname:minImageExtent and
pname:maxImageExtent, inclusive, where pname:minImageExtent and
pname:maxImageExtent are members of the sname:VkSurfaceCapabilitiesKHR
structure returned by fname:vkGetPhysicalDeviceSurfaceCapabilitiesKHR
for the surface
* pname:imageArrayLayers must: be greater than `0` and less than or equal
* [[VUID-VkSwapchainCreateInfoKHR-imageArrayLayers-01275]] pname:imageArrayLayers must: be greater than `0` and less than or equal
to the pname:maxImageArrayLayers member of the
sname:VkSurfaceCapabilitiesKHR structure returned by
fname:vkGetPhysicalDeviceSurfaceCapabilitiesKHR for the surface
* pname:imageUsage must: be a subset of the supported usage flags present
* [[VUID-VkSwapchainCreateInfoKHR-imageUsage-01276]] pname:imageUsage must: be a subset of the supported usage flags present
in the pname:supportedUsageFlags member of the
sname:VkSurfaceCapabilitiesKHR structure returned by
fname:vkGetPhysicalDeviceSurfaceCapabilitiesKHR for the surface
* If pname:imageSharingMode is ename:VK_SHARING_MODE_CONCURRENT,
ifdef::VK_KHR_shared_presentable_image[]
if pname:presentMode is set to ename:VK_PRESENT_MODE_IMMEDIATE_KHR,
ename:VK_PRESENT_MODE_MAILBOX_KHR, ename:VK_PRESENT_MODE_FIFO_KHR or
ename:VK_PRESENT_MODE_FIFO_RELAXED_KHR
* [[VUID-VkSwapchainCreateInfoKHR-imageUsage-01384]] pname:imageUsage must: be a subset of the supported usage flags present
in the pname:sharedPresentSupportedUsageFlags member of the
sname:VkSharedPresentSurfaceCapabilitiesKHR structure returned by
fname:vkGetPhysicalDeviceSurfaceCapabilities2KHR for the surface if
pname:presentMode is set to either
ename:VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR or
ename:VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR
endif::VK_KHR_shared_presentable_image[]
* [[VUID-VkSwapchainCreateInfoKHR-imageSharingMode-01277]] If pname:imageSharingMode is ename:VK_SHARING_MODE_CONCURRENT,
pname:pQueueFamilyIndices must: be a pointer to an array of
pname:queueFamilyIndexCount basetype:uint32_t values
* If pname:imageSharingMode is ename:VK_SHARING_MODE_CONCURRENT,
* [[VUID-VkSwapchainCreateInfoKHR-imageSharingMode-01278]] If pname:imageSharingMode is ename:VK_SHARING_MODE_CONCURRENT,
pname:queueFamilyIndexCount must: be greater than `1`
* pname:preTransform must: be one of the bits present in the
* [[VUID-VkSwapchainCreateInfoKHR-preTransform-01279]] pname:preTransform must: be one of the bits present in the
pname:supportedTransforms member of the sname:VkSurfaceCapabilitiesKHR
structure returned by fname:vkGetPhysicalDeviceSurfaceCapabilitiesKHR
for the surface
* pname:compositeAlpha must: be one of the bits present in the
* [[VUID-VkSwapchainCreateInfoKHR-compositeAlpha-01280]] pname:compositeAlpha must: be one of the bits present in the
pname:supportedCompositeAlpha member of the
sname:VkSurfaceCapabilitiesKHR structure returned by
fname:vkGetPhysicalDeviceSurfaceCapabilitiesKHR for the surface
* pname:presentMode must: be one of the ename:VkPresentModeKHR values
* [[VUID-VkSwapchainCreateInfoKHR-presentMode-01281]] pname:presentMode must: be one of the ename:VkPresentModeKHR values
returned by fname:vkGetPhysicalDeviceSurfacePresentModesKHR for the
surface
****
@ -370,11 +397,11 @@ endif::VK_KHR_display_swapchain[]
.Valid Usage
****
* All uses of presentable images acquired from pname:swapchain must: have
* [[VUID-vkDestroySwapchainKHR-swapchain-01282]] All uses of presentable images acquired from pname:swapchain must: have
completed execution
* If sname:VkAllocationCallbacks were provided when pname:swapchain was
* [[VUID-vkDestroySwapchainKHR-swapchain-01283]] If sname:VkAllocationCallbacks were provided when pname:swapchain was
created, a compatible set of callbacks must: be provided here
* If no sname:VkAllocationCallbacks were provided when pname:swapchain was
* [[VUID-vkDestroySwapchainKHR-swapchain-01284]] If no sname:VkAllocationCallbacks were provided when pname:swapchain was
created, pname:pAllocator must: be `NULL`
****
@ -470,11 +497,11 @@ include::../../api/protos/vkAcquireNextImageKHR.txt[]
.Valid Usage
****
* pname:swapchain must: not have been replaced by being passed as the
* [[VUID-vkAcquireNextImageKHR-swapchain-01285]] pname:swapchain must: not have been replaced by being passed as the
sname:VkSwapchainCreateInfoKHR::pname:oldSwapchain value to
fname:vkCreateSwapchainKHR
* If pname:semaphore is not dlink:VK_NULL_HANDLE it must: be unsignaled
* If pname:fence is not dlink:VK_NULL_HANDLE it must: be unsignaled and
* [[VUID-vkAcquireNextImageKHR-semaphore-01286]] If pname:semaphore is not dlink:VK_NULL_HANDLE it must: be unsignaled
* [[VUID-vkAcquireNextImageKHR-fence-01287]] If pname:fence is not dlink:VK_NULL_HANDLE it must: be unsignaled and
must: not be associated with any other queue command that has not yet
completed execution on that queue
****
@ -692,15 +719,23 @@ If presentation fails because of a mismatch in the surface and presented
image sizes, a ename:VK_ERROR_OUT_OF_DATE_KHR error will be returned.
Before an application can: present an image, the image's layout must: be
transitioned to the ename:VK_IMAGE_LAYOUT_PRESENT_SRC_KHR layout.
transitioned to the ename:VK_IMAGE_LAYOUT_PRESENT_SRC_KHR
ifdef::VK_KHR_shared_presentable_image[]
layout, or for a shared presentable image the
ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR
endif::VK_KHR_shared_presentable_image[]
layout.
.Note
[NOTE]
====
When transitioning the image to ename:VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, there
is no need to delay subsequent processing, or perform any visibility
operations (as flink:vkQueuePresentKHR performs automatic visibility
operations).
When transitioning the image to
ifdef::VK_KHR_shared_presentable_image[]
ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR or
endif::VK_KHR_shared_presentable_image[]
ename:VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, there is no need to delay subsequent
processing, or perform any visibility operations (as flink:vkQueuePresentKHR
performs automatic visibility operations).
To achieve this, the pname:dstAccessMask member of the
slink:VkImageMemoryBarrier should: be set to `0`, and the pname:dstStageMask
parameter should: be set to ename:VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT.
@ -744,12 +779,12 @@ include all physical devices in the logical device.
.Valid Usage
****
* If pname:semaphore is not dlink:VK_NULL_HANDLE it must: be unsignaled
* If pname:fence is not dlink:VK_NULL_HANDLE it must: be unsignaled and
* [[VUID-VkAcquireNextImageInfoKHX-semaphore-01288]] If pname:semaphore is not dlink:VK_NULL_HANDLE it must: be unsignaled
* [[VUID-VkAcquireNextImageInfoKHX-fence-01289]] If pname:fence is not dlink:VK_NULL_HANDLE it must: be unsignaled and
must: not be associated with any other queue command that has not yet
completed execution on that queue
* pname:deviceMask must: be a valid device mask
* pname:deviceMask must: not be zero
* [[VUID-VkAcquireNextImageInfoKHX-deviceMask-01290]] pname:deviceMask must: be a valid device mask
* [[VUID-VkAcquireNextImageInfoKHX-deviceMask-01291]] pname:deviceMask must: not be zero
****
include::../../validity/structs/VkAcquireNextImageInfoKHX.txt[]
@ -771,19 +806,19 @@ include::../../api/protos/vkQueuePresentKHR.txt[]
.Valid Usage
****
* Any given element of pname:pSwapchains member of pname:pPresentInfo
* [[VUID-vkQueuePresentKHR-pSwapchains-01292]] Any given element of pname:pSwapchains member of pname:pPresentInfo
must: be a swapchain that is created for a surface for which
presentation is supported from pname:queue as determined using a call to
fname:vkGetPhysicalDeviceSurfaceSupportKHR
ifdef::VK_KHR_display_swapchain[]
* If more than one member of pname:pSwapchains was created from a display
* [[VUID-vkQueuePresentKHR-pSwapchains-01293]] If more than one member of pname:pSwapchains was created from a display
surface, all display surfaces referenced that refer to the same display
must: use the same display mode
endif::VK_KHR_display_swapchain[]
* When a semaphore unsignal operation defined by the elements of the
* [[VUID-vkQueuePresentKHR-pWaitSemaphores-01294]] When a semaphore unsignal operation defined by the elements of the
pname:pWaitSemaphores member of pname:pPresentInfo executes on
pname:queue, no other queue must: be waiting on the same semaphore.
* All elements of the pname:pWaitSemaphores member of pname:pPresentInfo
* [[VUID-vkQueuePresentKHR-pWaitSemaphores-01295]] All elements of the pname:pWaitSemaphores member of pname:pPresentInfo
must: be semaphores that are signaled, or have
<<synchronization-semaphores-signaling, semaphore signal operations>>
previously submitted for execution.
@ -833,10 +868,13 @@ include::../../api/structs/VkPresentInfoKHR.txt[]
.Valid Usage
****
* Any given element of pname:pImageIndices must: be the index of a
* [[VUID-VkPresentInfoKHR-pImageIndices-01296]] Any given element of pname:pImageIndices must: be the index of a
presentable image acquired from the swapchain specified by the
corresponding element of the pname:pSwapchains array, and the presented
image subresource must: be in the ename:VK_IMAGE_LAYOUT_PRESENT_SRC_KHR
ifdef::VK_KHR_shared_presentable_image[]
or ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR
endif::VK_KHR_shared_presentable_image[]
layout at the time the operation is executed on a sname:VkDevice
****
@ -909,30 +947,30 @@ considered to be ename:VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHX.
.Valid Usage
****
* pname:swapchainCount must: equal `0` or
* [[VUID-VkDeviceGroupPresentInfoKHX-swapchainCount-01297]] pname:swapchainCount must: equal `0` or
slink:VkPresentInfoKHR::pname:swapchainCount
* If pname:mode is ename:VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHX, then
* [[VUID-VkDeviceGroupPresentInfoKHX-mode-01298]] If pname:mode is ename:VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHX, then
each element of pname:pDeviceMasks must: have exactly one bit set, and
the corresponding element of
slink:VkDeviceGroupPresentCapabilitiesKHX::pname:presentMask must: be
non-zero
* If pname:mode is ename:VK_DEVICE_GROUP_PRESENT_MODE_REMOTE_BIT_KHX, then
* [[VUID-VkDeviceGroupPresentInfoKHX-mode-01299]] If pname:mode is ename:VK_DEVICE_GROUP_PRESENT_MODE_REMOTE_BIT_KHX, then
each element of pname:pDeviceMasks must: have exactly one bit set, and
some physical device in the logical device must: include that bit in its
slink:VkDeviceGroupPresentCapabilitiesKHX::pname:presentMask.
* If pname:mode is ename:VK_DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHX, then
* [[VUID-VkDeviceGroupPresentInfoKHX-mode-01300]] If pname:mode is ename:VK_DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHX, then
each element of pname:pDeviceMasks must: have a value for which all set
bits are set in one of the elements of
slink:VkDeviceGroupPresentCapabilitiesKHX::pname:presentMask
* If pname:mode is
* [[VUID-VkDeviceGroupPresentInfoKHX-mode-01301]] If pname:mode is
ename:VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHX, then for
each bit set in each element of pname:pDeviceMasks, the corresponding
element of slink:VkDeviceGroupPresentCapabilitiesKHX::pname:presentMask
must: be non-zero
* The value of each element of pname:pDeviceMasks must: be equal to the
* [[VUID-VkDeviceGroupPresentInfoKHX-pDeviceMasks-01302]] The value of each element of pname:pDeviceMasks must: be equal to the
device mask passed in slink:VkAcquireNextImageInfoKHX::pname:deviceMask
when the image index was last acquired
* pname:mode must: have exactly one bit set, and that bit must: have been
* [[VUID-VkDeviceGroupPresentInfoKHX-mode-01303]] pname:mode must: have exactly one bit set, and that bit must: have been
included in slink:VkDeviceGroupSwapchainCreateInfoKHX::pname:modes
****

View File

@ -37,8 +37,8 @@ include::../../api/structs/VkWaylandSurfaceCreateInfoKHR.txt[]
.Valid Usage
****
* pname:display must: point to a valid Wayland code:wl_display.
* pname:surface must: point to a valid Wayland code:wl_surface.
* [[VUID-VkWaylandSurfaceCreateInfoKHR-display-01304]] pname:display must: point to a valid Wayland code:wl_display.
* [[VUID-VkWaylandSurfaceCreateInfoKHR-surface-01305]] pname:surface must: point to a valid Wayland code:wl_surface.
****
include::../../validity/structs/VkWaylandSurfaceCreateInfoKHR.txt[]

View File

@ -21,7 +21,7 @@ This platform-specific function can: be called prior to creating a surface.
.Valid Usage
****
* pname:queueFamilyIndex must: be less than
* [[VUID-vkGetPhysicalDeviceWaylandPresentationSupportKHR-queueFamilyIndex-01306]] pname:queueFamilyIndex must: be less than
pname:pQueueFamilyPropertyCount returned by
fname:vkGetPhysicalDeviceQueueFamilyProperties for the given
pname:physicalDevice

View File

@ -37,8 +37,8 @@ include::../../api/structs/VkWin32SurfaceCreateInfoKHR.txt[]
.Valid Usage
****
* pname:hinstance must: be a valid Win32 code:HINSTANCE.
* pname:hwnd must: be a valid Win32 code:HWND.
* [[VUID-VkWin32SurfaceCreateInfoKHR-hinstance-01307]] pname:hinstance must: be a valid Win32 code:HINSTANCE.
* [[VUID-VkWin32SurfaceCreateInfoKHR-hwnd-01308]] pname:hwnd must: be a valid Win32 code:HWND.
****
include::../../validity/structs/VkWin32SurfaceCreateInfoKHR.txt[]

View File

@ -19,7 +19,7 @@ This platform-specific function can: be called prior to creating a surface.
.Valid Usage
****
* pname:queueFamilyIndex must: be less than
* [[VUID-vkGetPhysicalDeviceWin32PresentationSupportKHR-queueFamilyIndex-01309]] pname:queueFamilyIndex must: be less than
pname:pQueueFamilyPropertyCount returned by
fname:vkGetPhysicalDeviceQueueFamilyProperties for the given
pname:physicalDevice

View File

@ -40,8 +40,8 @@ include::../../api/structs/VkXcbSurfaceCreateInfoKHR.txt[]
.Valid Usage
****
* pname:connection must: point to a valid X11 code:xcb_connection_t.
* pname:window must: be a valid X11 code:xcb_window_t.
* [[VUID-VkXcbSurfaceCreateInfoKHR-connection-01310]] pname:connection must: point to a valid X11 code:xcb_connection_t.
* [[VUID-VkXcbSurfaceCreateInfoKHR-window-01311]] pname:window must: be a valid X11 code:xcb_window_t.
****
include::../../validity/structs/VkXcbSurfaceCreateInfoKHR.txt[]

View File

@ -22,7 +22,7 @@ This platform-specific function can: be called prior to creating a surface.
.Valid Usage
****
* pname:queueFamilyIndex must: be less than
* [[VUID-vkGetPhysicalDeviceXcbPresentationSupportKHR-queueFamilyIndex-01312]] pname:queueFamilyIndex must: be less than
pname:pQueueFamilyPropertyCount returned by
fname:vkGetPhysicalDeviceQueueFamilyProperties for the given
pname:physicalDevice

View File

@ -39,8 +39,8 @@ include::../../api/structs/VkXlibSurfaceCreateInfoKHR.txt[]
.Valid Usage
****
* pname:dpy must: point to a valid Xlib code:Display.
* pname:window must: be a valid Xlib code:Window.
* [[VUID-VkXlibSurfaceCreateInfoKHR-dpy-01313]] pname:dpy must: point to a valid Xlib code:Display.
* [[VUID-VkXlibSurfaceCreateInfoKHR-window-01314]] pname:window must: be a valid Xlib code:Window.
****
include::../../validity/structs/VkXlibSurfaceCreateInfoKHR.txt[]

View File

@ -21,7 +21,7 @@ This platform-specific function can: be called prior to creating a surface.
.Valid Usage
****
* pname:queueFamilyIndex must: be less than
* [[VUID-vkGetPhysicalDeviceXlibPresentationSupportKHR-queueFamilyIndex-01315]] pname:queueFamilyIndex must: be less than
pname:pQueueFamilyPropertyCount returned by
fname:vkGetPhysicalDeviceQueueFamilyProperties for the given
pname:physicalDevice

View File

@ -36,7 +36,7 @@ include::../../api/structs/VkIOSSurfaceCreateInfoMVK.txt[]
.Valid Usage
****
* pname:pView must: be a valid code:UIView and must: be backed by a
* [[VUID-VkIOSSurfaceCreateInfoMVK-pView-01316]] pname:pView must: be a valid code:UIView and must: be backed by a
code:CALayer instance of type code:CAMetalLayer.
****

View File

@ -36,7 +36,7 @@ include::../../api/structs/VkMacOSSurfaceCreateInfoMVK.txt[]
.Valid Usage
****
* pname:pView must: be a valid code:NSView and must: be backed by a
* [[VUID-VkMacOSSurfaceCreateInfoMVK-pView-01317]] pname:pView must: be a valid code:NSView and must: be backed by a
code:CALayer instance of type code:CAMetalLayer.
****

View File

@ -47,7 +47,7 @@ include::../../api/structs/VkViSurfaceCreateInfoNN.txt[]
.Valid Usage
****
* pname:window must: be a valid code:nn::code:vi::code:NativeWindowHandle
* [[VUID-VkViSurfaceCreateInfoNN-window-01318]] pname:window must: be a valid code:nn::code:vi::code:NativeWindowHandle
****
include::../../validity/structs/VkViSurfaceCreateInfoNN.txt[]

View File

@ -15,9 +15,9 @@ include::../../api/protos/vkCmdReserveSpaceForCommandsNVX.txt[]
.Valid Usage
****
* The provided pname:commandBuffer must: not have had a prior space
* [[VUID-vkCmdReserveSpaceForCommandsNVX-commandBuffer-01329]] The provided pname:commandBuffer must: not have had a prior space
reservation since its creation or the last reset.
* The state of the pname:commandBuffer must: be legal to execute all
* [[VUID-vkCmdReserveSpaceForCommandsNVX-commandBuffer-01330]] The state of the pname:commandBuffer must: be legal to execute all
commands within the sequence provided by the
pname:indirectCommandsLayout member of pname:pProcessCommandsInfo.
****
@ -105,31 +105,31 @@ include::../../api/structs/VkCmdProcessCommandsInfoNVX.txt[]
.Valid Usage
****
* The provided pname:objectTable must: include all objects referenced by
* [[VUID-VkCmdProcessCommandsInfoNVX-objectTable-01331]] The provided pname:objectTable must: include all objects referenced by
the generation process.
* pname:indirectCommandsTokenCount must: match the
* [[VUID-VkCmdProcessCommandsInfoNVX-indirectCommandsTokenCount-01332]] pname:indirectCommandsTokenCount must: match the
pname:indirectCommandsLayout's pname:tokenCount.
* The pname:tokenType member of each entry in the
* [[VUID-VkCmdProcessCommandsInfoNVX-tokenType-01333]] The pname:tokenType member of each entry in the
pname:pIndirectCommandsTokens array must: match the values used at
creation time of pname:indirectCommandsLayout
* If pname:targetCommandBuffer is provided, it must: have reserved command
* [[VUID-VkCmdProcessCommandsInfoNVX-targetCommandBuffer-01334]] If pname:targetCommandBuffer is provided, it must: have reserved command
space.
* If pname:targetCommandBuffer is provided, the pname:objectTable must:
* [[VUID-VkCmdProcessCommandsInfoNVX-targetCommandBuffer-01335]] If pname:targetCommandBuffer is provided, the pname:objectTable must:
match the reservation's objectTable and must: have had all referenced
objects registered at reservation time.
* If pname:targetCommandBuffer is provided, the
* [[VUID-VkCmdProcessCommandsInfoNVX-targetCommandBuffer-01336]] If pname:targetCommandBuffer is provided, the
pname:indirectCommandsLayout must: match the reservation's
indirectCommandsLayout.
* If pname:targetCommandBuffer is provided, the pname:maxSequencesCount
* [[VUID-VkCmdProcessCommandsInfoNVX-targetCommandBuffer-01337]] If pname:targetCommandBuffer is provided, the pname:maxSequencesCount
must: not exceed the reservation's maxSequencesCount.
* If pname:sequencesCountBuffer is used, its usage flag must: have
* [[VUID-VkCmdProcessCommandsInfoNVX-sequencesCountBuffer-01338]] If pname:sequencesCountBuffer is used, its usage flag must: have
ename:VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT bit set.
* If pname:sequencesCountBuffer is used, pname:sequencesCountOffset must:
* [[VUID-VkCmdProcessCommandsInfoNVX-sequencesCountBuffer-01339]] If pname:sequencesCountBuffer is used, pname:sequencesCountOffset must:
be aligned to
sname:VkDeviceGeneratedCommandsLimitsNVX::pname:minSequenceCountBufferOffsetAlignment.
* If pname:sequencesIndexBuffer is used, its usage flag must: have
* [[VUID-VkCmdProcessCommandsInfoNVX-sequencesIndexBuffer-01340]] If pname:sequencesIndexBuffer is used, its usage flag must: have
ename:VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT bit set.
* If pname:sequencesIndexBuffer is used, pname:sequencesIndexOffset must:
* [[VUID-VkCmdProcessCommandsInfoNVX-sequencesIndexBuffer-01341]] If pname:sequencesIndexBuffer is used, pname:sequencesIndexOffset must:
be aligned to
sname:VkDeviceGeneratedCommandsLimitsNVX::pname:minSequenceIndexBufferOffsetAlignment.
****

View File

@ -83,11 +83,11 @@ include::../../api/structs/VkIndirectCommandsLayoutTokenNVX.txt[]
.Valid Usage
****
* pname:bindingUnit must: stay within device supported limits for the
* [[VUID-VkIndirectCommandsLayoutTokenNVX-bindingUnit-01342]] pname:bindingUnit must: stay within device supported limits for the
appropriate commands.
* pname:dynamicCount must: stay within device supported limits for the
* [[VUID-VkIndirectCommandsLayoutTokenNVX-dynamicCount-01343]] pname:dynamicCount must: stay within device supported limits for the
appropriate commands.
* pname:divisor must: be greater than `0` and a power of two.
* [[VUID-VkIndirectCommandsLayoutTokenNVX-divisor-01344]] pname:divisor must: be greater than `0` and a power of two.
****
include::../../validity/structs/VkIndirectCommandsLayoutTokenNVX.txt[]
@ -108,9 +108,9 @@ include::../../api/structs/VkIndirectCommandsTokenNVX.txt[]
.Valid Usage
****
* The pname:buffer's usage flag must: have the
* [[VUID-VkIndirectCommandsTokenNVX-buffer-01345]] The pname:buffer's usage flag must: have the
ename:VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT bit set.
* The pname:offset must: be aligned to
* [[VUID-VkIndirectCommandsTokenNVX-offset-01346]] The pname:offset must: be aligned to
sname:VkDeviceGeneratedCommandsLimitsNVX::pname:minCommandsTokenBufferOffsetAlignment.
****
@ -285,21 +285,21 @@ void cmdProcessAllSequences(cmd, objectTable, indirectCommandsLayout, pIndirectC
.Valid Usage
****
* pname:tokenCount must: be greater than `0` and below
* [[VUID-VkIndirectCommandsLayoutCreateInfoNVX-tokenCount-01347]] pname:tokenCount must: be greater than `0` and below
sname:VkDeviceGeneratedCommandsLimitsNVX::pname:maxIndirectCommandsLayoutTokenCount
* If the
* [[VUID-VkIndirectCommandsLayoutCreateInfoNVX-computeBindingPointSupport-01348]] If the
sname:VkDeviceGeneratedCommandsFeaturesNVX::pname:computeBindingPointSupport
feature is not enabled, then pname:pipelineBindPoint must: not be
ename:VK_PIPELINE_BIND_POINT_COMPUTE
* If pname:pTokens contains an entry of
* [[VUID-VkIndirectCommandsLayoutCreateInfoNVX-pTokens-01349]] If pname:pTokens contains an entry of
ename:VK_INDIRECT_COMMANDS_TOKEN_PIPELINE_NVX it must: be the first
element of the array and there must: be only a single element of such
token type.
* All state binding tokens in pname:pTokens must: occur prior work
* [[VUID-VkIndirectCommandsLayoutCreateInfoNVX-pTokens-01350]] All state binding tokens in pname:pTokens must: occur prior work
provoking tokens (ename:VK_INDIRECT_COMMANDS_TOKEN_DRAW_NVX,
ename:VK_INDIRECT_COMMANDS_TOKEN_DRAW_INDEXED_NVX,
ename:VK_INDIRECT_COMMANDS_TOKEN_DISPATCH_NVX).
* The content of pname:pTokens must: include at least one work provoking
* [[VUID-VkIndirectCommandsLayoutCreateInfoNVX-pTokens-01351]] The content of pname:pTokens must: include at least one work provoking
token.
****
@ -318,11 +318,11 @@ include::../../api/protos/vkDestroyIndirectCommandsLayoutNVX.txt[]
.Valid Usage
****
* All submitted commands that refer to pname:indirectCommandsLayout must:
* [[VUID-vkDestroyIndirectCommandsLayoutNVX-indirectCommandsLayout-01352]] All submitted commands that refer to pname:indirectCommandsLayout must:
have completed execution
* If sname:VkAllocationCallbacks were provided when pname:objectTable was
* [[VUID-vkDestroyIndirectCommandsLayoutNVX-objectTable-01353]] If sname:VkAllocationCallbacks were provided when pname:objectTable was
created, a compatible set of callbacks must: be provided here
* If no sname:VkAllocationCallbacks were provided when pname:objectTable
* [[VUID-vkDestroyIndirectCommandsLayoutNVX-objectTable-01354]] If no sname:VkAllocationCallbacks were provided when pname:objectTable
was created, pname:pAllocator must: be `NULL`
****

View File

@ -110,19 +110,19 @@ include::../../api/enums/VkObjectEntryUsageFlagBitsNVX.txt[]
.Valid Usage
****
* If the
* [[VUID-VkObjectTableCreateInfoNVX-computeBindingPointSupport-01355]] If the
sname:VkDeviceGeneratedCommandsFeaturesNVX::pname:computeBindingPointSupport
feature is not enabled, pname:pObjectEntryUsageFlags must: not contain
ename:VK_OBJECT_ENTRY_USAGE_COMPUTE_BIT_NVX
* Any value within pname:pObjectEntryCounts must: not exceed
* [[VUID-VkObjectTableCreateInfoNVX-pObjectEntryCounts-01356]] Any value within pname:pObjectEntryCounts must: not exceed
sname:VkDeviceGeneratedCommandsLimitsNVX::pname:maxObjectEntryCounts
* pname:maxUniformBuffersPerDescriptor must: be within the limits
* [[VUID-VkObjectTableCreateInfoNVX-maxUniformBuffersPerDescriptor-01357]] pname:maxUniformBuffersPerDescriptor must: be within the limits
supported by the device.
* pname:maxStorageBuffersPerDescriptor must: be within the limits
* [[VUID-VkObjectTableCreateInfoNVX-maxStorageBuffersPerDescriptor-01358]] pname:maxStorageBuffersPerDescriptor must: be within the limits
supported by the device.
* pname:maxStorageImagesPerDescriptor must: be within the limits supported
* [[VUID-VkObjectTableCreateInfoNVX-maxStorageImagesPerDescriptor-01359]] pname:maxStorageImagesPerDescriptor must: be within the limits supported
by the device.
* pname:maxSampledImagesPerDescriptor must: be within the limits supported
* [[VUID-VkObjectTableCreateInfoNVX-maxSampledImagesPerDescriptor-01360]] pname:maxSampledImagesPerDescriptor must: be within the limits supported
by the device.
****
@ -141,11 +141,11 @@ include::../../api/protos/vkDestroyObjectTableNVX.txt[]
.Valid Usage
****
* All submitted commands that refer to pname:objectTable must: have
* [[VUID-vkDestroyObjectTableNVX-objectTable-01361]] All submitted commands that refer to pname:objectTable must: have
completed execution.
* If sname:VkAllocationCallbacks were provided when pname:objectTable was
* [[VUID-vkDestroyObjectTableNVX-objectTable-01362]] If sname:VkAllocationCallbacks were provided when pname:objectTable was
created, a compatible set of callbacks must: be provided here.
* If no sname:VkAllocationCallbacks were provided when pname:objectTable
* [[VUID-vkDestroyObjectTableNVX-objectTable-01363]] If no sname:VkAllocationCallbacks were provided when pname:objectTable
was created, pname:pAllocator must: be `NULL`.
****
@ -175,11 +175,11 @@ include::../../api/protos/vkRegisterObjectsNVX.txt[]
.Valid Usage
****
* The contents of pname:pObjectTableEntry must: yield plausible bindings
* [[VUID-vkRegisterObjectsNVX-pObjectTableEntry-01364]] The contents of pname:pObjectTableEntry must: yield plausible bindings
supported by the device.
* At any pname:pObjectIndices there must: not be a registered resource
* [[VUID-vkRegisterObjectsNVX-pObjectIndices-01365]] At any pname:pObjectIndices there must: not be a registered resource
already.
* Any value inside pname:pObjectIndices must: be below the appropriate
* [[VUID-vkRegisterObjectsNVX-pObjectIndices-01366]] Any value inside pname:pObjectIndices must: be below the appropriate
sname:VkObjectTableCreateInfoNVX::pname:pObjectEntryCounts limits
provided at pname:objectTable creation time.
****
@ -197,7 +197,7 @@ include::../../api/structs/VkObjectTableEntryNVX.txt[]
.Valid Usage
****
* If the
* [[VUID-VkObjectTableEntryNVX-computeBindingPointSupport-01367]] If the
sname:VkDeviceGeneratedCommandsFeaturesNVX::pname:computeBindingPointSupport
feature is not enabled, pname:flags must: not contain
ename:VK_OBJECT_ENTRY_USAGE_COMPUTE_BIT_NVX
@ -212,7 +212,7 @@ include::../../api/structs/VkObjectTablePipelineEntryNVX.txt[]
.Valid Usage
****
* pname:type must: be ename:VK_OBJECT_ENTRY_PIPELINE_NVX
* [[VUID-VkObjectTablePipelineEntryNVX-type-01368]] pname:type must: be ename:VK_OBJECT_ENTRY_PIPELINE_NVX
****
include::../../validity/structs/VkObjectTablePipelineEntryNVX.txt[]
@ -226,7 +226,7 @@ include::../../api/structs/VkObjectTableDescriptorSetEntryNVX.txt[]
.Valid Usage
****
* pname:type must: be ename:VK_OBJECT_ENTRY_DESCRIPTOR_SET_NVX
* [[VUID-VkObjectTableDescriptorSetEntryNVX-type-01369]] pname:type must: be ename:VK_OBJECT_ENTRY_DESCRIPTOR_SET_NVX
****
include::../../validity/structs/VkObjectTableDescriptorSetEntryNVX.txt[]
@ -238,7 +238,7 @@ include::../../api/structs/VkObjectTableVertexBufferEntryNVX.txt[]
.Valid Usage
****
* pname:type must: be ename:VK_OBJECT_ENTRY_VERTEX_BUFFER_NVX
* [[VUID-VkObjectTableVertexBufferEntryNVX-type-01370]] pname:type must: be ename:VK_OBJECT_ENTRY_VERTEX_BUFFER_NVX
****
include::../../validity/structs/VkObjectTableVertexBufferEntryNVX.txt[]
@ -252,7 +252,7 @@ include::../../api/structs/VkObjectTableIndexBufferEntryNVX.txt[]
.Valid Usage
****
* pname:type must: be ename:VK_OBJECT_ENTRY_INDEX_BUFFER_NVX
* [[VUID-VkObjectTableIndexBufferEntryNVX-type-01371]] pname:type must: be ename:VK_OBJECT_ENTRY_INDEX_BUFFER_NVX
****
include::../../validity/structs/VkObjectTableIndexBufferEntryNVX.txt[]
@ -266,7 +266,7 @@ include::../../api/structs/VkObjectTablePushConstantEntryNVX.txt[]
.Valid Usage
****
* pname:type must: be ename:VK_OBJECT_ENTRY_PUSH_CONSTANT_NVX
* [[VUID-VkObjectTablePushConstantEntryNVX-type-01372]] pname:type must: be ename:VK_OBJECT_ENTRY_PUSH_CONSTANT_NVX
****
include::../../validity/structs/VkObjectTablePushConstantEntryNVX.txt[]
@ -286,11 +286,11 @@ include::../../api/protos/vkUnregisterObjectsNVX.txt[]
.Valid Usage
****
* At any pname:pObjectIndices there must: be a registered resource
* [[VUID-vkUnregisterObjectsNVX-pObjectIndices-01373]] At any pname:pObjectIndices there must: be a registered resource
already.
* The pname:pObjectEntryTypes of the resource at pname:pObjectIndices
* [[VUID-vkUnregisterObjectsNVX-pObjectEntryTypes-01374]] The pname:pObjectEntryTypes of the resource at pname:pObjectIndices
must: match.
* All operations on the device using the registered resource must: have
* [[VUID-vkUnregisterObjectsNVX-None-01375]] All operations on the device using the registered resource must: have
been completed.
****

View File

@ -35,13 +35,13 @@ include::../../api/structs/VkPipelineViewportWScalingStateCreateInfoNV.txt[]
.Valid Usage
****
* If the <<features-features-multiViewport,multiple viewports>> feature is
* [[VUID-VkPipelineViewportWScalingStateCreateInfoNV-viewportWScalingEnable-01319]] If the <<features-features-multiViewport,multiple viewports>> feature is
not enabled and pname:viewportWScalingEnable is ename:VK_TRUE,
pname:viewportCount must: be `1`
* pname:viewportCount must: be between `1` and
* [[VUID-VkPipelineViewportWScalingStateCreateInfoNV-viewportCount-01320]] pname:viewportCount must: be between `1` and
sname:VkPhysicalDeviceLimits::pname:maxViewports, inclusive if
pname:viewportWScalingEnable is ename:VK_TRUE
* pname:viewportCount and
* [[VUID-VkPipelineViewportWScalingStateCreateInfoNV-viewportCount-01321]] pname:viewportCount and
sname:VkPipelineViewportStateCreateInfo::pname:viewportCount must: be
identical if pname:viewportWScalingEnable is ename:VK_TRUE
****
@ -82,13 +82,13 @@ pname:viewportCount)#.
.Valid Usage
****
* The currently bound graphics pipeline must: have been created with the
* [[VUID-vkCmdSetViewportWScalingNV-None-01322]] The currently bound graphics pipeline must: have been created with the
ename:VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV dynamic state enabled
* pname:firstViewport must: be less than
* [[VUID-vkCmdSetViewportWScalingNV-firstViewport-01323]] pname:firstViewport must: be less than
sname:VkPhysicalDeviceLimits::pname:maxViewports
* The sum of pname:firstViewport and pname:viewportCount must: be between
* [[VUID-vkCmdSetViewportWScalingNV-firstViewport-01324]] The sum of pname:firstViewport and pname:viewportCount must: be between
`1` and sname:VkPhysicalDeviceLimits::pname:maxViewports, inclusive
* pname:pViewportScalings must: be a pointer to an array of
* [[VUID-vkCmdSetViewportWScalingNV-pViewportScalings-01325]] pname:pViewportScalings must: be a pointer to an array of
pname:viewportCount valid sname:VkViewportWScalingNV structures
****

View File

@ -17,7 +17,7 @@ include::../../api/protos/vkGetMemoryWin32HandleNV.txt[]
.Valid Usage
****
* pname:handleType must: be a flag specified in
* [[VUID-vkGetMemoryWin32HandleNV-handleType-01326]] pname:handleType must: be a flag specified in
slink:VkExportMemoryAllocateInfoNV::pname:handleTypes when allocating
pname:memory
****

View File

@ -22,8 +22,8 @@ slink:VkMemoryAllocateInfo structure it is chained from.
.Valid Usage
****
* pname:handleType must: not have more than one bit set.
* pname:handle must: be a valid handle to memory, obtained as specified by
* [[VUID-VkImportMemoryWin32HandleInfoNV-handleType-01327]] pname:handleType must: not have more than one bit set.
* [[VUID-VkImportMemoryWin32HandleInfoNV-handle-01328]] pname:handle must: be a valid handle to memory, obtained as specified by
pname:handleType.
****

View File

@ -23,7 +23,11 @@ include::../api/protos/vkCmdClearColorImage.txt[]
recorded.
* pname:image is the image to be cleared.
* pname:imageLayout specifies the current layout of the image subresource
ranges to be cleared, and must: be ename:VK_IMAGE_LAYOUT_GENERAL or
ranges to be cleared, and must: be
ifdef::VK_KHR_shared_presentable_image[]
ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR,
endif::VK_KHR_shared_presentable_image[]
ename:VK_IMAGE_LAYOUT_GENERAL or
ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL.
* pname:pColor is a pointer to a slink:VkClearColorValue structure that
contains the values the image subresource ranges will be cleared to (see
@ -43,25 +47,29 @@ pname:pColor.
.Valid Usage
****
ifdef::VK_KHR_maintenance1[]
* pname:image must: use a format that supports
* [[VUID-vkCmdClearColorImage-image-00001]] pname:image must: use a format that supports
ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR, which is indicated by
sname:VkFormatProperties::pname:linearTilingFeatures (for linearly tiled
images) or sname:VkFormatProperties::pname:optimalTilingFeatures (for
optimally tiled images) - as returned by
fname:vkGetPhysicalDeviceFormatProperties
endif::VK_KHR_maintenance1[]
* pname:image must: have been created with
* [[VUID-vkCmdClearColorImage-image-00002]] pname:image must: have been created with
ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT usage flag
* If pname:image is non-sparse then it must: be bound completely and
* [[VUID-vkCmdClearColorImage-image-00003]] If pname:image is non-sparse then it must: be bound completely and
contiguously to a single sname:VkDeviceMemory object
* pname:imageLayout must: specify the layout of the image subresource
* [[VUID-vkCmdClearColorImage-imageLayout-00004]] pname:imageLayout must: specify the layout of the image subresource
ranges of pname:image specified in pname:pRanges at the time this
command is executed on a sname:VkDevice
* pname:imageLayout must: be ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL or
* [[VUID-vkCmdClearColorImage-imageLayout-00005]] pname:imageLayout must: be
ifdef::VK_KHR_shared_presentable_image[]
ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR,
endif::VK_KHR_shared_presentable_image[]
ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL or
ename:VK_IMAGE_LAYOUT_GENERAL
* The image range of any given element of pname:pRanges must: be an image
* [[VUID-vkCmdClearColorImage-pRanges-00006]] The image range of any given element of pname:pRanges must: be an image
subresource range that is contained within pname:image
* pname:image must: not have a compressed or depth/stencil format
* [[VUID-vkCmdClearColorImage-image-00007]] pname:image must: not have a compressed or depth/stencil format
****
include::../validity/protos/vkCmdClearColorImage.txt[]
@ -98,26 +106,26 @@ include::../api/protos/vkCmdClearDepthStencilImage.txt[]
.Valid Usage
****
ifdef::VK_KHR_maintenance1[]
* pname:image must: use a format that supports
* [[VUID-vkCmdClearDepthStencilImage-image-00008]] pname:image must: use a format that supports
ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR, which is indicated by
sname:VkFormatProperties::pname:linearTilingFeatures (for linearly tiled
images) or sname:VkFormatProperties::pname:optimalTilingFeatures (for
optimally tiled images) - as returned by
fname:vkGetPhysicalDeviceFormatProperties
endif::VK_KHR_maintenance1[]
* pname:image must: have been created with
* [[VUID-vkCmdClearDepthStencilImage-image-00009]] pname:image must: have been created with
ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT usage flag
* If pname:image is non-sparse then it must: be bound completely and
* [[VUID-vkCmdClearDepthStencilImage-image-00010]] If pname:image is non-sparse then it must: be bound completely and
contiguously to a single sname:VkDeviceMemory object
* pname:imageLayout must: specify the layout of the image subresource
* [[VUID-vkCmdClearDepthStencilImage-imageLayout-00011]] pname:imageLayout must: specify the layout of the image subresource
ranges of pname:image specified in pname:pRanges at the time this
command is executed on a sname:VkDevice
* pname:imageLayout must: be either of
* [[VUID-vkCmdClearDepthStencilImage-imageLayout-00012]] pname:imageLayout must: be either of
ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL or
ename:VK_IMAGE_LAYOUT_GENERAL
* The image range of any given element of pname:pRanges must: be an image
* [[VUID-vkCmdClearDepthStencilImage-pRanges-00013]] The image range of any given element of pname:pRanges must: be an image
subresource range that is contained within pname:image
* pname:image must: have a depth/stencil format
* [[VUID-vkCmdClearDepthStencilImage-image-00014]] pname:image must: have a depth/stencil format
****
include::../validity/protos/vkCmdClearDepthStencilImage.txt[]
@ -155,17 +163,17 @@ attachments and the command parameters.
.Valid Usage
****
* If the pname:aspectMask member of any given element of
* [[VUID-vkCmdClearAttachments-aspectMask-00015]] If the pname:aspectMask member of any given element of
pname:pAttachments contains ename:VK_IMAGE_ASPECT_COLOR_BIT, the
pname:colorAttachment member of those elements must: refer to a valid
color attachment in the current subpass
* The rectangular region specified by a given element of pname:pRects
* [[VUID-vkCmdClearAttachments-pRects-00016]] The rectangular region specified by a given element of pname:pRects
must: be contained within the render area of the current render pass
instance
* The layers specified by a given element of pname:pRects must: be
* [[VUID-vkCmdClearAttachments-pRects-00017]] The layers specified by a given element of pname:pRects must: be
contained within every attachment that pname:pAttachments refers to
ifdef::VK_KHX_multiview[]
* If the render pass instance this is recorded in uses multiview, then
* [[VUID-vkCmdClearAttachments-baseArrayLayer-00018]] If the render pass instance this is recorded in uses multiview, then
pname:baseArrayLayer must: be zero and pname:layerCount must: be one.
endif::VK_KHX_multiview[]
****
@ -227,11 +235,11 @@ described for flink:vkCreateRenderPass.
.Valid Usage
****
* If pname:aspectMask includes ename:VK_IMAGE_ASPECT_COLOR_BIT, it must:
* [[VUID-VkClearAttachment-aspectMask-00019]] If pname:aspectMask includes ename:VK_IMAGE_ASPECT_COLOR_BIT, it must:
not include ename:VK_IMAGE_ASPECT_DEPTH_BIT or
ename:VK_IMAGE_ASPECT_STENCIL_BIT
* pname:aspectMask must: not include ename:VK_IMAGE_ASPECT_METADATA_BIT
* pname:clearValue must: be a valid sname:VkClearValue union
* [[VUID-VkClearAttachment-aspectMask-00020]] pname:aspectMask must: not include ename:VK_IMAGE_ASPECT_METADATA_BIT
* [[VUID-VkClearAttachment-clearValue-00021]] pname:clearValue must: be a valid sname:VkClearValue union
****
include::../validity/structs/VkClearAttachment.txt[]
@ -292,7 +300,7 @@ include::../api/structs/VkClearDepthStencilValue.txt[]
.Valid Usage
****
* pname:depth must: be between `0.0` and `1.0`, inclusive
* [[VUID-VkClearDepthStencilValue-depth-00022]] pname:depth must: be between `0.0` and `1.0`, inclusive
****
include::../validity/structs/VkClearDepthStencilValue.txt[]
@ -314,7 +322,7 @@ initial clear values in the slink:VkRenderPassBeginInfo structure.
.Valid Usage
****
* pname:depthStencil must: be a valid sname:VkClearDepthStencilValue
* [[VUID-VkClearValue-depthStencil-00023]] pname:depthStencil must: be a valid sname:VkClearDepthStencilValue
structure
****
@ -352,21 +360,21 @@ fname:vkCmdFillBuffer.
.Valid Usage
****
* pname:dstOffset must: be less than the size of pname:dstBuffer
* pname:dstOffset must: be a multiple of `4`
* If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:size must: be
* [[VUID-vkCmdFillBuffer-dstOffset-00024]] pname:dstOffset must: be less than the size of pname:dstBuffer
* [[VUID-vkCmdFillBuffer-dstOffset-00025]] pname:dstOffset must: be a multiple of `4`
* [[VUID-vkCmdFillBuffer-size-00026]] If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:size must: be
greater than `0`
* If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:size must: be
* [[VUID-vkCmdFillBuffer-size-00027]] If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:size must: be
less than or equal to the size of pname:dstBuffer minus pname:dstOffset
* If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:size must: be a
* [[VUID-vkCmdFillBuffer-size-00028]] If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:size must: be a
multiple of `4`
* pname:dstBuffer must: have been created with
* [[VUID-vkCmdFillBuffer-dstBuffer-00029]] pname:dstBuffer must: have been created with
ename:VK_BUFFER_USAGE_TRANSFER_DST_BIT usage flag
ifndef::VK_KHR_maintenance1[]
* The sname:VkCommandPool that pname:commandBuffer was allocated from
* [[VUID-vkCmdFillBuffer-commandBuffer-00030]] The sname:VkCommandPool that pname:commandBuffer was allocated from
must: support graphics or compute operations
endif::VK_KHR_maintenance1[]
* If pname:dstBuffer is non-sparse then it must: be bound completely and
* [[VUID-vkCmdFillBuffer-dstBuffer-00031]] If pname:dstBuffer is non-sparse then it must: be bound completely and
contiguously to a single sname:VkDeviceMemory object
****
@ -408,16 +416,16 @@ fname:vkCmdUpdateBuffer.
.Valid Usage
****
* pname:dstOffset must: be less than the size of pname:dstBuffer
* pname:dataSize must: be less than or equal to the size of
* [[VUID-vkCmdUpdateBuffer-dstOffset-00032]] pname:dstOffset must: be less than the size of pname:dstBuffer
* [[VUID-vkCmdUpdateBuffer-dataSize-00033]] pname:dataSize must: be less than or equal to the size of
pname:dstBuffer minus pname:dstOffset
* pname:dstBuffer must: have been created with
* [[VUID-vkCmdUpdateBuffer-dstBuffer-00034]] pname:dstBuffer must: have been created with
ename:VK_BUFFER_USAGE_TRANSFER_DST_BIT usage flag
* If pname:dstBuffer is non-sparse then it must: be bound completely and
* [[VUID-vkCmdUpdateBuffer-dstBuffer-00035]] If pname:dstBuffer is non-sparse then it must: be bound completely and
contiguously to a single sname:VkDeviceMemory object
* pname:dstOffset must: be a multiple of `4`
* pname:dataSize must: be less than or equal to `65536`
* pname:dataSize must: be a multiple of `4`
* [[VUID-vkCmdUpdateBuffer-dstOffset-00036]] pname:dstOffset must: be a multiple of `4`
* [[VUID-vkCmdUpdateBuffer-dataSize-00037]] pname:dataSize must: be less than or equal to `65536`
* [[VUID-vkCmdUpdateBuffer-dataSize-00038]] pname:dataSize must: be a multiple of `4`
****
include::../validity/protos/vkCmdUpdateBuffer.txt[]

View File

@ -194,7 +194,7 @@ include::../api/enums/VkCommandPoolCreateFlagBits.txt[]
.Valid Usage
****
* pname:queueFamilyIndex must: be the index of a queue family available in
* [[VUID-VkCommandPoolCreateInfo-queueFamilyIndex-00039]] pname:queueFamilyIndex must: be the index of a queue family available in
the calling command's pname:device parameter
****
@ -292,7 +292,7 @@ into it, becomes <<commandbuffers-lifecycle, invalid>>.
.Valid Usage
****
* All sname:VkCommandBuffer objects allocated from pname:commandPool must:
* [[VUID-vkResetCommandPool-commandPool-00040]] All sname:VkCommandBuffer objects allocated from pname:commandPool must:
not be in the <<commandbuffers-lifecycle, pending state>>
****
@ -319,11 +319,11 @@ into it, becomes <<commandbuffers-lifecycle, invalid>>.
.Valid Usage
****
* All sname:VkCommandBuffer objects allocated from pname:commandPool must:
* [[VUID-vkDestroyCommandPool-commandPool-00041]] All sname:VkCommandBuffer objects allocated from pname:commandPool must:
not be in the <<commandbuffers-lifecycle, pending state>>.
* If sname:VkAllocationCallbacks were provided when pname:commandPool was
* [[VUID-vkDestroyCommandPool-commandPool-00042]] If sname:VkAllocationCallbacks were provided when pname:commandPool was
created, a compatible set of callbacks must: be provided here
* If no sname:VkAllocationCallbacks were provided when pname:commandPool
* [[VUID-vkDestroyCommandPool-commandPool-00043]] If no sname:VkAllocationCallbacks were provided when pname:commandPool
was created, pname:pAllocator must: be `NULL`
****
@ -386,7 +386,7 @@ include::../api/enums/VkCommandBufferLevel.txt[]
.Valid Usage
****
* pname:commandBufferCount must: be greater than `0`
* [[VUID-VkCommandBufferAllocateInfo-commandBufferCount-00044]] pname:commandBufferCount must: be greater than `0`
****
include::../validity/structs/VkCommandBufferAllocateInfo.txt[]
@ -423,9 +423,9 @@ it, becomes <<commandbuffers-lifecycle, invalid>>.
.Valid Usage
****
* pname:commandBuffer must: not be in the <<commandbuffers-lifecycle,
* [[VUID-vkResetCommandBuffer-commandBuffer-00045]] pname:commandBuffer must: not be in the <<commandbuffers-lifecycle,
pending state>>
* pname:commandBuffer must: have been allocated from a pool that was
* [[VUID-vkResetCommandBuffer-commandBuffer-00046]] pname:commandBuffer must: have been allocated from a pool that was
created with the ename:VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT
****
@ -450,9 +450,9 @@ recorded into it, becomes <<commandbuffers-lifecycle, invalid>>.
.Valid Usage
****
* All elements of pname:pCommandBuffers must: not be in the
* [[VUID-vkFreeCommandBuffers-pCommandBuffers-00047]] All elements of pname:pCommandBuffers must: not be in the
<<commandbuffers-lifecycle, pending state>>
* pname:pCommandBuffers must: be a pointer to an array of
* [[VUID-vkFreeCommandBuffers-pCommandBuffers-00048]] pname:pCommandBuffers must: be a pointer to an array of
pname:commandBufferCount sname:VkCommandBuffer handles, each element of
which must: either be a valid handle or `NULL`
****
@ -477,16 +477,16 @@ include::../api/protos/vkBeginCommandBuffer.txt[]
.Valid Usage
****
* pname:commandBuffer must: not be in the <<commandbuffers-lifecycle,
* [[VUID-vkBeginCommandBuffer-commandBuffer-00049]] pname:commandBuffer must: not be in the <<commandbuffers-lifecycle,
recording or pending state>>.
* If pname:commandBuffer was allocated from a slink:VkCommandPool which
* [[VUID-vkBeginCommandBuffer-commandBuffer-00050]] If pname:commandBuffer was allocated from a slink:VkCommandPool which
did not have the ename:VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT
flag set, pname:commandBuffer must: be in the
<<commandbuffers-lifecycle, initial state>>.
* If pname:commandBuffer is a secondary command buffer, the
* [[VUID-vkBeginCommandBuffer-commandBuffer-00051]] If pname:commandBuffer is a secondary command buffer, the
pname:pInheritanceInfo member of pname:pBeginInfo must: be a valid
sname:VkCommandBufferInheritanceInfo structure
* If pname:commandBuffer is a secondary command buffer and either the
* [[VUID-vkBeginCommandBuffer-commandBuffer-00052]] If pname:commandBuffer is a secondary command buffer and either the
pname:occlusionQueryEnable member of the pname:pInheritanceInfo member
of pname:pBeginInfo is ename:VK_FALSE, or the precise occlusion queries
feature is not enabled, the pname:queryFlags member of the
@ -531,15 +531,15 @@ include::../api/enums/VkCommandBufferUsageFlagBits.txt[]
.Valid Usage
****
* If pname:flags contains
* [[VUID-VkCommandBufferBeginInfo-flags-00053]] If pname:flags contains
ename:VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT, the
pname:renderPass member of pname:pInheritanceInfo must: be a valid
sname:VkRenderPass
* If pname:flags contains
* [[VUID-VkCommandBufferBeginInfo-flags-00054]] If pname:flags contains
ename:VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT, the
pname:subpass member of pname:pInheritanceInfo must: be a valid subpass
index within the pname:renderPass member of pname:pInheritanceInfo
* If pname:flags contains
* [[VUID-VkCommandBufferBeginInfo-flags-00055]] If pname:flags contains
ename:VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT, the
pname:framebuffer member of pname:pInheritanceInfo must: be either
dlink:VK_NULL_HANDLE, or a valid sname:VkFramebuffer that is compatible
@ -606,12 +606,12 @@ time.
.Valid Usage
****
* If the <<features-features-inheritedQueries,inherited queries>> feature
* [[VUID-VkCommandBufferInheritanceInfo-occlusionQueryEnable-00056]] If the <<features-features-inheritedQueries,inherited queries>> feature
is not enabled, pname:occlusionQueryEnable must: be ename:VK_FALSE
* If the <<features-features-inheritedQueries,inherited queries>> feature
* [[VUID-VkCommandBufferInheritanceInfo-queryFlags-00057]] If the <<features-features-inheritedQueries,inherited queries>> feature
is enabled, pname:queryFlags must: be a valid combination of
elink:VkQueryControlFlagBits values
* If the <<features-features-pipelineStatisticsQuery,pipeline statistics
* [[VUID-VkCommandBufferInheritanceInfo-pipelineStatistics-00058]] If the <<features-features-pipelineStatisticsQuery,pipeline statistics
queries>> feature is not enabled, pname:pipelineStatistics must: be
code:0
****
@ -671,14 +671,14 @@ executable state>>.
.Valid Usage
****
* pname:commandBuffer must: be in the <<commandbuffers-lifecycle,
* [[VUID-vkEndCommandBuffer-commandBuffer-00059]] pname:commandBuffer must: be in the <<commandbuffers-lifecycle,
recording state>>.
* If pname:commandBuffer is a primary command buffer, there must: not be
* [[VUID-vkEndCommandBuffer-commandBuffer-00060]] If pname:commandBuffer is a primary command buffer, there must: not be
an active render pass instance
* All queries made <<queries-operation-active,active>> during the
* [[VUID-vkEndCommandBuffer-commandBuffer-00061]] All queries made <<queries-operation-active,active>> during the
recording of pname:commandBuffer must: have been made inactive
ifdef::VK_EXT_debug_marker[]
* If pname:commandBuffer is a secondary command buffer, there must: not be
* [[VUID-vkEndCommandBuffer-commandBuffer-00062]] If pname:commandBuffer is a secondary command buffer, there must: not be
an outstanding flink:vkCmdDebugMarkerBeginEXT command recorded to
pname:commandBuffer that has not previously been ended by a call to
flink:vkCmdDebugMarkerEndEXT.
@ -763,49 +763,49 @@ See <<devsandqueues-lost-device,Lost Device>>.
.Valid Usage
****
* If pname:fence is not dlink:VK_NULL_HANDLE, pname:fence must: be
* [[VUID-vkQueueSubmit-fence-00063]] If pname:fence is not dlink:VK_NULL_HANDLE, pname:fence must: be
unsignaled
* If pname:fence is not dlink:VK_NULL_HANDLE, pname:fence must: not be
* [[VUID-vkQueueSubmit-fence-00064]] If pname:fence is not dlink:VK_NULL_HANDLE, pname:fence must: not be
associated with any other queue command that has not yet completed
execution on that queue
* Any calls to flink:vkCmdSetEvent, flink:vkCmdResetEvent or
* [[VUID-vkQueueSubmit-pCommandBuffers-00065]] Any calls to flink:vkCmdSetEvent, flink:vkCmdResetEvent or
flink:vkCmdWaitEvents that have been recorded into any of the command
buffer elements of the pname:pCommandBuffers member of any element of
pname:pSubmits, must: not reference any slink:VkEvent that is referenced
by any of those commands in a command buffer that has been submitted to
another queue and is still in the _pending state_.
* Any stage flag included in any element of the pname:pWaitDstStageMask
* [[VUID-vkQueueSubmit-pWaitDstStageMask-00066]] Any stage flag included in any element of the pname:pWaitDstStageMask
member of any element of pname:pSubmits must: be a pipeline stage
supported by one of the capabilities of pname:queue, as specified in the
<<synchronization-pipeline-stages-supported, table of supported pipeline
stages>>.
* Any given element of the pname:pSignalSemaphores member of any element
* [[VUID-vkQueueSubmit-pSignalSemaphores-00067]] Any given element of the pname:pSignalSemaphores member of any element
of pname:pSubmits must: be unsignaled when the semaphore signal
operation it defines is executed on the device
* When a semaphore unsignal operation defined by any element of the
* [[VUID-vkQueueSubmit-pWaitSemaphores-00068]] When a semaphore unsignal operation defined by any element of the
pname:pWaitSemaphores member of any element of pname:pSubmits executes
on pname:queue, no other queue must: be waiting on the same semaphore.
* All elements of the pname:pWaitSemaphores member of all elements of
* [[VUID-vkQueueSubmit-pWaitSemaphores-00069]] All elements of the pname:pWaitSemaphores member of all elements of
pname:pSubmits must: be semaphores that are signaled, or have
<<synchronization-semaphores-signaling, semaphore signal operations>>
previously submitted for execution.
* Any given element of the pname:pCommandBuffers member of any element of
* [[VUID-vkQueueSubmit-pCommandBuffers-00070]] Any given element of the pname:pCommandBuffers member of any element of
pname:pSubmits must: be in the <<commandbuffers-lifecycle, pending or
executable state>>.
* If any given element of the pname:pCommandBuffers member of any element
* [[VUID-vkQueueSubmit-pCommandBuffers-00071]] If any given element of the pname:pCommandBuffers member of any element
of pname:pSubmits was not recorded with the
ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT, it must: not be in
the <<commandbuffers-lifecycle, pending state>>.
* Any <<commandbuffers-secondary, secondary command buffers recorded>>
* [[VUID-vkQueueSubmit-pCommandBuffers-00072]] Any <<commandbuffers-secondary, secondary command buffers recorded>>
into any given element of the pname:pCommandBuffers member of any
element of pname:pSubmits must: be in the <<commandbuffers-lifecycle,
pending or executable state>>.
* If any <<commandbuffers-secondary, secondary command buffers recorded>>
* [[VUID-vkQueueSubmit-pCommandBuffers-00073]] If any <<commandbuffers-secondary, secondary command buffers recorded>>
into any given element of the pname:pCommandBuffers member of any
element of pname:pSubmits was not recorded with the
ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT, it must: not be in
the <<commandbuffers-lifecycle, pending state>>.
* Any given element of the pname:pCommandBuffers member of any element of
* [[VUID-vkQueueSubmit-pCommandBuffers-00074]] Any given element of the pname:pCommandBuffers member of any element of
pname:pSubmits must: have been allocated from a sname:VkCommandPool that
was created for the same queue family pname:queue belongs to.
****
@ -852,17 +852,17 @@ otherwise execute out of order.
.Valid Usage
****
* Any given element of pname:pCommandBuffers must: not have been allocated
* [[VUID-VkSubmitInfo-pCommandBuffers-00075]] Any given element of pname:pCommandBuffers must: not have been allocated
with ename:VK_COMMAND_BUFFER_LEVEL_SECONDARY
* If the <<features-features-geometryShader,geometry shaders>> feature is
* [[VUID-VkSubmitInfo-pWaitDstStageMask-00076]] If the <<features-features-geometryShader,geometry shaders>> feature is
not enabled, any given element of pname:pWaitDstStageMask must: not
contain ename:VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT
* If the <<features-features-tessellationShader,tessellation shaders>>
* [[VUID-VkSubmitInfo-pWaitDstStageMask-00077]] If the <<features-features-tessellationShader,tessellation shaders>>
feature is not enabled, any given element of pname:pWaitDstStageMask
must: not contain
ename:VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT or
ename:VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT
* Any given element of pname:pWaitDstStageMask must: not include
* [[VUID-VkSubmitInfo-pWaitDstStageMask-00078]] Any given element of pname:pWaitDstStageMask must: not include
ename:VK_PIPELINE_STAGE_HOST_BIT.
****
@ -902,11 +902,11 @@ pname:pWaitSemaphoreValues or pname:pSignalSemaphoreValues entry is ignored.
.Valid Usage
****
* pname:waitSemaphoreValuesCount must: be the same value as
* [[VUID-VkD3D12FenceSubmitInfoKHX-waitSemaphoreValuesCount-00079]] pname:waitSemaphoreValuesCount must: be the same value as
sname:VkSubmitInfo::pname:waitSemaphoreCount, where sname:SubmitInfo is
in the pname:pNext chain of this sname:VkD3D12FenceSubmitInfoKHX
structure.
* pname:signalSemaphoreValuesCount must: be the same value as
* [[VUID-VkD3D12FenceSubmitInfoKHX-signalSemaphoreValuesCount-00080]] pname:signalSemaphoreValuesCount must: be the same value as
sname:VkSubmitInfo::pname:signalSemaphoreCount, where sname:SubmitInfo
is in the pname:pNext chain of this sname:VkD3D12FenceSubmitInfoKHX
structure.
@ -957,7 +957,7 @@ include::../api/structs/VkWin32KeyedMutexAcquireReleaseInfoKHX.txt[]
.Valid Usage
****
* Each member of pname:pAcquireSyncs and pname:pReleaseSyncs must: be a
* [[VUID-VkWin32KeyedMutexAcquireReleaseInfoKHX-pAcquireSyncs-00081]] Each member of pname:pAcquireSyncs and pname:pReleaseSyncs must: be a
device memory object imported by setting
slink:VkImportMemoryWin32HandleInfoKHX::pname:handleType to
ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT_KHX or
@ -1012,15 +1012,15 @@ execute on device index zero.
.Valid Usage
****
* pname:waitSemaphoreCount must: equal
* [[VUID-VkDeviceGroupSubmitInfoKHX-waitSemaphoreCount-00082]] pname:waitSemaphoreCount must: equal
slink:VkSubmitInfo::pname:waitSemaphoreCount
* pname:commandBufferCount must: equal
* [[VUID-VkDeviceGroupSubmitInfoKHX-commandBufferCount-00083]] pname:commandBufferCount must: equal
slink:VkSubmitInfo::pname:commandBufferCount
* pname:signalSemaphoreCount must: equal
* [[VUID-VkDeviceGroupSubmitInfoKHX-signalSemaphoreCount-00084]] pname:signalSemaphoreCount must: equal
slink:VkSubmitInfo::pname:signalSemaphoreCount
* All elements of pname:pWaitSemaphoreDeviceIndices and
* [[VUID-VkDeviceGroupSubmitInfoKHX-pWaitSemaphoreDeviceIndices-00085]] All elements of pname:pWaitSemaphoreDeviceIndices and
pname:pSignalSemaphoreDeviceIndices must: be valid device indices
* All elements of pname:pCommandBufferDeviceMasks must: be valid device
* [[VUID-VkDeviceGroupSubmitInfoKHX-pCommandBufferDeviceMasks-00086]] All elements of pname:pCommandBufferDeviceMasks must: be valid device
masks
****
@ -1079,73 +1079,73 @@ command buffer becomes <<commandbuffers-lifecycle, invalid>>.
.Valid Usage
****
* pname:commandBuffer must: have been allocated with a pname:level of
* [[VUID-vkCmdExecuteCommands-commandBuffer-00087]] pname:commandBuffer must: have been allocated with a pname:level of
ename:VK_COMMAND_BUFFER_LEVEL_PRIMARY
* Any given element of pname:pCommandBuffers must: have been allocated
* [[VUID-vkCmdExecuteCommands-pCommandBuffers-00088]] Any given element of pname:pCommandBuffers must: have been allocated
with a pname:level of ename:VK_COMMAND_BUFFER_LEVEL_SECONDARY
* Any given element of pname:pCommandBuffers must: be in the
* [[VUID-vkCmdExecuteCommands-pCommandBuffers-00089]] Any given element of pname:pCommandBuffers must: be in the
<<commandbuffers-lifecycle, pending or executable state>>.
* If any element of pname:pCommandBuffers was not recorded with the
* [[VUID-vkCmdExecuteCommands-pCommandBuffers-00090]] If any element of pname:pCommandBuffers was not recorded with the
ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT flag, and it was
recorded into any other primary command buffer, that primary command
buffer must: not be in the <<commandbuffers-lifecycle, pending state>>
* If any given element of pname:pCommandBuffers was not recorded with the
* [[VUID-vkCmdExecuteCommands-pCommandBuffers-00091]] If any given element of pname:pCommandBuffers was not recorded with the
ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT flag, it must: not be
in the <<commandbuffers-lifecycle, pending state>>.
* If any given element of pname:pCommandBuffers was not recorded with the
* [[VUID-vkCmdExecuteCommands-pCommandBuffers-00092]] If any given element of pname:pCommandBuffers was not recorded with the
ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT flag, it must: not
have already been recorded to pname:commandBuffer.
* If any given element of pname:pCommandBuffers was not recorded with the
* [[VUID-vkCmdExecuteCommands-pCommandBuffers-00093]] If any given element of pname:pCommandBuffers was not recorded with the
ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT flag, it must: not
appear more than once in pname:pCommandBuffers.
* Any given element of pname:pCommandBuffers must: have been allocated
* [[VUID-vkCmdExecuteCommands-pCommandBuffers-00094]] Any given element of pname:pCommandBuffers must: have been allocated
from a sname:VkCommandPool that was created for the same queue family as
the sname:VkCommandPool from which pname:commandBuffer was allocated
* If fname:vkCmdExecuteCommands is being called within a render pass
* [[VUID-vkCmdExecuteCommands-contents-00095]] If fname:vkCmdExecuteCommands is being called within a render pass
instance, that render pass instance must: have been begun with the
pname:contents parameter of fname:vkCmdBeginRenderPass set to
ename:VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS
* If fname:vkCmdExecuteCommands is being called within a render pass
* [[VUID-vkCmdExecuteCommands-pCommandBuffers-00096]] If fname:vkCmdExecuteCommands is being called within a render pass
instance, any given element of pname:pCommandBuffers must: have been
recorded with the ename:VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT
* If fname:vkCmdExecuteCommands is being called within a render pass
* [[VUID-vkCmdExecuteCommands-pCommandBuffers-00097]] If fname:vkCmdExecuteCommands is being called within a render pass
instance, any given element of pname:pCommandBuffers must: have been
recorded with sname:VkCommandBufferInheritanceInfo::pname:subpass set to
the index of the subpass which the given command buffer will be executed
in
* If fname:vkCmdExecuteCommands is being called within a render pass
* [[VUID-vkCmdExecuteCommands-pInheritanceInfo-00098]] If fname:vkCmdExecuteCommands is being called within a render pass
instance, the render passes specified in the
pname::pBeginInfo::pname:pInheritanceInfo::pname:renderPass members of
the flink:vkBeginCommandBuffer commands used to begin recording each
element of pname:pCommandBuffers must: be
<<renderpass-compatibility,compatible>> with the current render pass.
* If fname:vkCmdExecuteCommands is being called within a render pass
* [[VUID-vkCmdExecuteCommands-pCommandBuffers-00099]] If fname:vkCmdExecuteCommands is being called within a render pass
instance, and any given element of pname:pCommandBuffers was recorded
with sname:VkCommandBufferInheritanceInfo::pname:framebuffer not equal
to dlink:VK_NULL_HANDLE, that sname:VkFramebuffer must: match the
sname:VkFramebuffer used in the current render pass instance
* If fname:vkCmdExecuteCommands is not being called within a render pass
* [[VUID-vkCmdExecuteCommands-pCommandBuffers-00100]] If fname:vkCmdExecuteCommands is not being called within a render pass
instance, any given element of pname:pCommandBuffers must: not have been
recorded with the ename:VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT
* If the <<features-features-inheritedQueries,inherited queries>> feature
* [[VUID-vkCmdExecuteCommands-commandBuffer-00101]] If the <<features-features-inheritedQueries,inherited queries>> feature
is not enabled, pname:commandBuffer must: not have any queries
<<queries-operation-active,active>>
* If pname:commandBuffer has a ename:VK_QUERY_TYPE_OCCLUSION query
* [[VUID-vkCmdExecuteCommands-commandBuffer-00102]] If pname:commandBuffer has a ename:VK_QUERY_TYPE_OCCLUSION query
<<queries-operation-active,active>>, then each element of
pname:pCommandBuffers must: have been recorded with
sname:VkCommandBufferInheritanceInfo::pname:occlusionQueryEnable set to
ename:VK_TRUE
* If pname:commandBuffer has a ename:VK_QUERY_TYPE_OCCLUSION query
* [[VUID-vkCmdExecuteCommands-commandBuffer-00103]] If pname:commandBuffer has a ename:VK_QUERY_TYPE_OCCLUSION query
<<queries-operation-active,active>>, then each element of
pname:pCommandBuffers must: have been recorded with
sname:VkCommandBufferInheritanceInfo::pname:queryFlags having all bits
set that are set for the query
* If pname:commandBuffer has a ename:VK_QUERY_TYPE_PIPELINE_STATISTICS
* [[VUID-vkCmdExecuteCommands-commandBuffer-00104]] If pname:commandBuffer has a ename:VK_QUERY_TYPE_PIPELINE_STATISTICS
query <<queries-operation-active,active>>, then each element of
pname:pCommandBuffers must: have been recorded with
sname:VkCommandBufferInheritanceInfo::pname:pipelineStatistics having
all bits set that are set in the sname:VkQueryPool the query uses
* Any given element of pname:pCommandBuffers must: not begin any query
* [[VUID-vkCmdExecuteCommands-pCommandBuffers-00105]] Any given element of pname:pCommandBuffers must: not begin any query
types that are <<queries-operation-active,active>> in
pname:commandBuffer
****
@ -1201,8 +1201,8 @@ when the command buffer begins recording.
.Valid Usage
****
* pname:deviceMask must: be a valid device mask value
* pname:deviceMask must: not be zero
* [[VUID-VkDeviceGroupCommandBufferBeginInfoKHX-deviceMask-00106]] pname:deviceMask must: be a valid device mask value
* [[VUID-VkDeviceGroupCommandBufferBeginInfoKHX-deviceMask-00107]] pname:deviceMask must: not be zero
****
include::../validity/structs/VkDeviceGroupCommandBufferBeginInfoKHX.txt[]
@ -1223,12 +1223,12 @@ all physical devices whose bit indices are not set in the mask.
.Valid Usage
****
* pname:deviceMask must: be a valid device mask value
* pname:deviceMask must: not be zero
* pname:deviceMask must: not include any set bits that were not in the
* [[VUID-vkCmdSetDeviceMaskKHX-deviceMask-00108]] pname:deviceMask must: be a valid device mask value
* [[VUID-vkCmdSetDeviceMaskKHX-deviceMask-00109]] pname:deviceMask must: not be zero
* [[VUID-vkCmdSetDeviceMaskKHX-deviceMask-00110]] pname:deviceMask must: not include any set bits that were not in the
slink:VkDeviceGroupCommandBufferBeginInfoKHX::pname:deviceMask value
when the command buffer began recording.
* If fname:vkCmdSetDeviceMaskKHX is called inside a render pass instance,
* [[VUID-vkCmdSetDeviceMaskKHX-deviceMask-00111]] If fname:vkCmdSetDeviceMaskKHX is called inside a render pass instance,
pname:deviceMask must: not include any set bits that were not in the
slink:VkDeviceGroupRenderPassBeginInfoKHX::pname:deviceMask value when
the render pass instance began recording.

View File

@ -37,6 +37,9 @@ Some rules for valid operation are common to all copy commands:
ename:VK_IMAGE_LAYOUT_GENERAL or
ename:VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL layout.
Destination image subresources must: be in the
ifdef::VK_KHR_shared_presentable_image[]
ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR,
endif::VK_KHR_shared_presentable_image[]
ename:VK_IMAGE_LAYOUT_GENERAL or
ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL layout.
As a consequence, if an image subresource is used as both source and
@ -94,26 +97,26 @@ memory.
.Valid Usage
****
* The pname:size member of a given element of pname:pRegions must: be
* [[VUID-vkCmdCopyBuffer-size-00112]] The pname:size member of a given element of pname:pRegions must: be
greater than `0`
* The pname:srcOffset member of a given element of pname:pRegions must: be
* [[VUID-vkCmdCopyBuffer-srcOffset-00113]] The pname:srcOffset member of a given element of pname:pRegions must: be
less than the size of pname:srcBuffer
* The pname:dstOffset member of a given element of pname:pRegions must: be
* [[VUID-vkCmdCopyBuffer-dstOffset-00114]] The pname:dstOffset member of a given element of pname:pRegions must: be
less than the size of pname:dstBuffer
* The pname:size member of a given element of pname:pRegions must: be less
* [[VUID-vkCmdCopyBuffer-size-00115]] The pname:size member of a given element of pname:pRegions must: be less
than or equal to the size of pname:srcBuffer minus pname:srcOffset
* The pname:size member of a given element of pname:pRegions must: be less
* [[VUID-vkCmdCopyBuffer-size-00116]] The pname:size member of a given element of pname:pRegions must: be less
than or equal to the size of pname:dstBuffer minus pname:dstOffset
* The union of the source regions, and the union of the destination
* [[VUID-vkCmdCopyBuffer-pRegions-00117]] The union of the source regions, and the union of the destination
regions, specified by the elements of pname:pRegions, must: not overlap
in memory
* pname:srcBuffer must: have been created with
* [[VUID-vkCmdCopyBuffer-srcBuffer-00118]] pname:srcBuffer must: have been created with
ename:VK_BUFFER_USAGE_TRANSFER_SRC_BIT usage flag
* If pname:srcBuffer is non-sparse then it must: be bound completely and
* [[VUID-vkCmdCopyBuffer-srcBuffer-00119]] If pname:srcBuffer is non-sparse then it must: be bound completely and
contiguously to a single sname:VkDeviceMemory object
* pname:dstBuffer must: have been created with
* [[VUID-vkCmdCopyBuffer-dstBuffer-00120]] pname:dstBuffer must: have been created with
ename:VK_BUFFER_USAGE_TRANSFER_DST_BIT usage flag
* If pname:dstBuffer is non-sparse then it must: be bound completely and
* [[VUID-vkCmdCopyBuffer-dstBuffer-00121]] If pname:dstBuffer is non-sparse then it must: be bound completely and
contiguously to a single sname:VkDeviceMemory object
****
@ -245,50 +248,58 @@ images, but both images must: have the same number of samples.
.Valid Usage
****
* The source region specified by a given element of pname:pRegions must:
* [[VUID-vkCmdCopyImage-pRegions-00122]] The source region specified by a given element of pname:pRegions must:
be a region that is contained within pname:srcImage
* The destination region specified by a given element of pname:pRegions
* [[VUID-vkCmdCopyImage-pRegions-00123]] The destination region specified by a given element of pname:pRegions
must: be a region that is contained within pname:dstImage
* The union of all source regions, and the union of all destination
* [[VUID-vkCmdCopyImage-pRegions-00124]] The union of all source regions, and the union of all destination
regions, specified by the elements of pname:pRegions, must: not overlap
in memory
ifdef::VK_KHR_maintenance1[]
* pname:srcImage must: use a format that supports
* [[VUID-vkCmdCopyImage-srcImage-00125]] pname:srcImage must: use a format that supports
ename:VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR, which is indicated by
sname:VkFormatProperties::pname:linearTilingFeatures (for linearly tiled
images) or sname:VkFormatProperties::pname:optimalTilingFeatures (for
optimally tiled images) - as returned by
flink:vkGetPhysicalDeviceFormatProperties
endif::VK_KHR_maintenance1[]
* pname:srcImage must: have been created with
* [[VUID-vkCmdCopyImage-srcImage-00126]] pname:srcImage must: have been created with
ename:VK_IMAGE_USAGE_TRANSFER_SRC_BIT usage flag
* If pname:srcImage is non-sparse then it must: be bound completely and
* [[VUID-vkCmdCopyImage-srcImage-00127]] If pname:srcImage is non-sparse then it must: be bound completely and
contiguously to a single sname:VkDeviceMemory object
* pname:srcImageLayout must: specify the layout of the image subresources
* [[VUID-vkCmdCopyImage-srcImageLayout-00128]] pname:srcImageLayout must: specify the layout of the image subresources
of pname:srcImage specified in pname:pRegions at the time this command
is executed on a sname:VkDevice
* pname:srcImageLayout must: be ename:VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL
or ename:VK_IMAGE_LAYOUT_GENERAL
* [[VUID-vkCmdCopyImage-srcImageLayout-00129]] pname:srcImageLayout must: be
ifdef::VK_KHR_shared_presentable_image[]
ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR,
endif::VK_KHR_shared_presentable_image[]
ename:VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL or
ename:VK_IMAGE_LAYOUT_GENERAL
ifdef::VK_KHR_maintenance1[]
* pname:dstImage must: use a format that supports
* [[VUID-vkCmdCopyImage-dstImage-00130]] pname:dstImage must: use a format that supports
ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR, which is indicated by
sname:VkFormatProperties::pname:linearTilingFeatures (for linearly tiled
images) or sname:VkFormatProperties::pname:optimalTilingFeatures (for
optimally tiled images) - as returned by
flink:vkGetPhysicalDeviceFormatProperties
endif::VK_KHR_maintenance1[]
* pname:dstImage must: have been created with
* [[VUID-vkCmdCopyImage-dstImage-00131]] pname:dstImage must: have been created with
ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT usage flag
* If pname:dstImage is non-sparse then it must: be bound completely and
* [[VUID-vkCmdCopyImage-dstImage-00132]] If pname:dstImage is non-sparse then it must: be bound completely and
contiguously to a single sname:VkDeviceMemory object
* pname:dstImageLayout must: specify the layout of the image subresources
* [[VUID-vkCmdCopyImage-dstImageLayout-00133]] pname:dstImageLayout must: specify the layout of the image subresources
of pname:dstImage specified in pname:pRegions at the time this command
is executed on a sname:VkDevice
* pname:dstImageLayout must: be ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL
or ename:VK_IMAGE_LAYOUT_GENERAL
* The elink:VkFormat of each of pname:srcImage and pname:dstImage must: be
* [[VUID-vkCmdCopyImage-dstImageLayout-00134]] pname:dstImageLayout must: be
ifdef::VK_KHR_shared_presentable_image[]
ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR,
endif::VK_KHR_shared_presentable_image[]
ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL or
ename:VK_IMAGE_LAYOUT_GENERAL
* [[VUID-vkCmdCopyImage-srcImage-00135]] The elink:VkFormat of each of pname:srcImage and pname:dstImage must: be
compatible, as defined <<copies-images-format-compatibility, below>>
* The sample count of pname:srcImage and pname:dstImage must: match
* [[VUID-vkCmdCopyImage-srcImage-00136]] The sample count of pname:srcImage and pname:dstImage must: match
****
include::../validity/protos/vkCmdCopyImage.txt[]
@ -330,93 +341,93 @@ endif::VK_KHR_maintenance1[]
.Valid Usage
****
* The pname:aspectMask member of pname:srcSubresource and
* [[VUID-VkImageCopy-aspectMask-00137]] The pname:aspectMask member of pname:srcSubresource and
pname:dstSubresource must: match
ifndef::VK_KHR_maintenance1[]
* The pname:layerCount member of pname:srcSubresource and
* [[VUID-VkImageCopy-layerCount-00138]] The pname:layerCount member of pname:srcSubresource and
pname:dstSubresource must: match
* If either of the calling command's pname:srcImage or pname:dstImage
* [[VUID-VkImageCopy-srcImage-00139]] If either of the calling command's pname:srcImage or pname:dstImage
parameters are of elink:VkImageType ename:VK_IMAGE_TYPE_3D, the
pname:baseArrayLayer and pname:layerCount members of both
pname:srcSubresource and pname:dstSubresource must: be `0` and `1`,
respectively
endif::VK_KHR_maintenance1[]
ifdef::VK_KHR_maintenance1[]
* The number of slices of the pname:extent (for 3D) or layers of the
* [[VUID-VkImageCopy-extent-00140]] The number of slices of the pname:extent (for 3D) or layers of the
pname:srcSubresource (for non-3D) must: match the number of slices of
the pname:extent (for 3D) or layers of the pname:dstSubresource (for
non-3D)
* If either of the calling command's pname:srcImage or pname:dstImage
* [[VUID-VkImageCopy-srcImage-00141]] If either of the calling command's pname:srcImage or pname:dstImage
parameters are of elink:VkImageType ename:VK_IMAGE_TYPE_3D, the
pname:baseArrayLayer and pname:layerCount members of the corresponding
subresource must: be `0` and `1`, respectively
endif::VK_KHR_maintenance1[]
* The pname:aspectMask member of pname:srcSubresource must: specify
* [[VUID-VkImageCopy-aspectMask-00142]] The pname:aspectMask member of pname:srcSubresource must: specify
aspects present in the calling command's pname:srcImage
* The pname:aspectMask member of pname:dstSubresource must: specify
* [[VUID-VkImageCopy-aspectMask-00143]] The pname:aspectMask member of pname:dstSubresource must: specify
aspects present in the calling command's pname:dstImage
* pname:srcOffset.x and (pname:extent.width + pname:srcOffset.x) must:
* [[VUID-VkImageCopy-srcOffset-00144]] pname:srcOffset.x and (pname:extent.width + pname:srcOffset.x) must:
both be greater than or equal to `0` and less than or equal to the
source image subresource width
* pname:srcOffset.y and (pname:extent.height + pname:srcOffset.y) must:
* [[VUID-VkImageCopy-srcOffset-00145]] pname:srcOffset.y and (pname:extent.height + pname:srcOffset.y) must:
both be greater than or equal to `0` and less than or equal to the
source image subresource height
* If the calling command's pname:srcImage is of type
* [[VUID-VkImageCopy-srcImage-00146]] If the calling command's pname:srcImage is of type
ename:VK_IMAGE_TYPE_1D, then pname:srcOffset.y must: be `0` and
pname:extent.height must: be `1`.
* pname:srcOffset.z and (pname:extent.depth + pname:srcOffset.z) must:
* [[VUID-VkImageCopy-srcOffset-00147]] pname:srcOffset.z and (pname:extent.depth + pname:srcOffset.z) must:
both be greater than or equal to `0` and less than or equal to the
source image subresource depth
* If the calling command's pname:srcImage is of type
* [[VUID-VkImageCopy-srcImage-00148]] If the calling command's pname:srcImage is of type
ename:VK_IMAGE_TYPE_1D or ename:VK_IMAGE_TYPE_2D, then pname:srcOffset.z
must: be `0` and pname:extent.depth must: be `1`.
* pname:srcSubresource.baseArrayLayer must: be less than and
* [[VUID-VkImageCopy-srcSubresource-00149]] pname:srcSubresource.baseArrayLayer must: be less than and
(pname:srcSubresource.layerCount + pname:srcSubresource.baseArrayLayer)
must: be less than or equal to the number of layers in the source image
* pname:dstOffset.x and (pname:extent.width + pname:dstOffset.x) must:
* [[VUID-VkImageCopy-dstOffset-00150]] pname:dstOffset.x and (pname:extent.width + pname:dstOffset.x) must:
both be greater than or equal to `0` and less than or equal to the
destination image subresource width
* pname:dstOffset.y and (pname:extent.height + pname:dstOffset.y) must:
* [[VUID-VkImageCopy-dstOffset-00151]] pname:dstOffset.y and (pname:extent.height + pname:dstOffset.y) must:
both be greater than or equal to `0` and less than or equal to the
destination image subresource height
* If the calling command's pname:dstImage is of type
* [[VUID-VkImageCopy-dstImage-00152]] If the calling command's pname:dstImage is of type
ename:VK_IMAGE_TYPE_1D, then pname:dstOffset.y must: be `0` and
pname:extent.height must: be `1`.
* pname:dstOffset.z and (pname:extent.depth + pname:dstOffset.z) must:
* [[VUID-VkImageCopy-dstOffset-00153]] pname:dstOffset.z and (pname:extent.depth + pname:dstOffset.z) must:
both be greater than or equal to `0` and less than or equal to the
destination image subresource depth
* If the calling command's pname:dstImage is of type
* [[VUID-VkImageCopy-dstImage-00154]] If the calling command's pname:dstImage is of type
ename:VK_IMAGE_TYPE_1D or ename:VK_IMAGE_TYPE_2D, then pname:dstOffset.z
must: be `0` and pname:extent.depth must: be `1`.
* pname:dstSubresource.baseArrayLayer must: be less than and
* [[VUID-VkImageCopy-dstSubresource-00155]] pname:dstSubresource.baseArrayLayer must: be less than and
(pname:dstSubresource.layerCount + pname:dstSubresource.baseArrayLayer)
must: be less than or equal to the number of layers in the destination
image
* If the calling command's pname:srcImage is a compressed format image:
** all members of pname:srcOffset must: be a multiple of the corresponding
* [[VUID-VkImageCopy-srcImage-00156]] If the calling command's pname:srcImage is a compressed format image:
** [[VUID-VkImageCopy-srcOffset-00157]] all members of pname:srcOffset must: be a multiple of the corresponding
dimensions of the compressed texel block
** pname:extent.width must: be a multiple of the compressed texel block
** [[VUID-VkImageCopy-extent-00158]] pname:extent.width must: be a multiple of the compressed texel block
width or (pname:extent.width + pname:srcOffset.x) must: equal the
source image subresource width
** pname:extent.height must: be a multiple of the compressed texel block
** [[VUID-VkImageCopy-extent-00159]] pname:extent.height must: be a multiple of the compressed texel block
height or (pname:extent.height + pname:srcOffset.y) must: equal the
source image subresource height
** pname:extent.depth must: be a multiple of the compressed texel block
** [[VUID-VkImageCopy-extent-00160]] pname:extent.depth must: be a multiple of the compressed texel block
depth or (pname:extent.depth + pname:srcOffset.z) must: equal the
source image subresource depth
* If the calling command's pname:dstImage is a compressed format image:
** all members of pname:dstOffset must: be a multiple of the corresponding
* [[VUID-VkImageCopy-dstImage-00161]] If the calling command's pname:dstImage is a compressed format image:
** [[VUID-VkImageCopy-dstOffset-00162]] all members of pname:dstOffset must: be a multiple of the corresponding
dimensions of the compressed texel block
** pname:extent.width must: be a multiple of the compressed texel block
** [[VUID-VkImageCopy-extent-00163]] pname:extent.width must: be a multiple of the compressed texel block
width or (pname:extent.width + pname:dstOffset.x) must: equal the
destination image subresource width
** pname:extent.height must: be a multiple of the compressed texel block
** [[VUID-VkImageCopy-extent-00164]] pname:extent.height must: be a multiple of the compressed texel block
height or (pname:extent.height + pname:dstOffset.y) must: equal the
destination image subresource height
** pname:extent.depth must: be a multiple of the compressed texel block
** [[VUID-VkImageCopy-extent-00165]] pname:extent.depth must: be a multiple of the compressed texel block
depth or (pname:extent.depth + pname:dstOffset.z) must: equal the
destination image subresource depth
* pname:srcOffset, pname:dstOffset, and pname:extent must: respect the
* [[VUID-VkImageCopy-srcOffset-00166]] pname:srcOffset, pname:dstOffset, and pname:extent must: respect the
image transfer granularity requirements of the queue family that it will
be submitted against, as described in
<<devsandqueues-physical-device-enumeration,Physical Device
@ -439,13 +450,13 @@ include::../api/structs/VkImageSubresourceLayers.txt[]
.Valid Usage
****
* If pname:aspectMask contains ename:VK_IMAGE_ASPECT_COLOR_BIT, it must:
* [[VUID-VkImageSubresourceLayers-aspectMask-00167]] If pname:aspectMask contains ename:VK_IMAGE_ASPECT_COLOR_BIT, it must:
not contain either of ename:VK_IMAGE_ASPECT_DEPTH_BIT or
ename:VK_IMAGE_ASPECT_STENCIL_BIT
* pname:aspectMask must: not contain ename:VK_IMAGE_ASPECT_METADATA_BIT
* pname:mipLevel must: be less than the pname:mipLevels specified in
* [[VUID-VkImageSubresourceLayers-aspectMask-00168]] pname:aspectMask must: not contain ename:VK_IMAGE_ASPECT_METADATA_BIT
* [[VUID-VkImageSubresourceLayers-mipLevel-00169]] pname:mipLevel must: be less than the pname:mipLevels specified in
slink:VkImageCreateInfo when the image was created
* [eq]#(pname:baseArrayLayer + pname:layerCount)# must: be less than or
* [[VUID-VkImageSubresourceLayers-baseArrayLayer-00170]] [eq]#(pname:baseArrayLayer + pname:layerCount)# must: be less than or
equal to the pname:arrayLayers specified in slink:VkImageCreateInfo when
the image was created
****
@ -477,36 +488,40 @@ source buffer to the specified region of the destination image.
.Valid Usage
****
* The buffer region specified by a given element of pname:pRegions must:
* [[VUID-vkCmdCopyBufferToImage-pRegions-00171]] The buffer region specified by a given element of pname:pRegions must:
be a region that is contained within pname:srcBuffer
* The image region specified by a given element of pname:pRegions must: be
* [[VUID-vkCmdCopyBufferToImage-pRegions-00172]] The image region specified by a given element of pname:pRegions must: be
a region that is contained within pname:dstImage
* The union of all source regions, and the union of all destination
* [[VUID-vkCmdCopyBufferToImage-pRegions-00173]] The union of all source regions, and the union of all destination
regions, specified by the elements of pname:pRegions, must: not overlap
in memory
* pname:srcBuffer must: have been created with
* [[VUID-vkCmdCopyBufferToImage-srcBuffer-00174]] pname:srcBuffer must: have been created with
ename:VK_BUFFER_USAGE_TRANSFER_SRC_BIT usage flag
ifdef::VK_KHR_maintenance1[]
* pname:dstImage must: use a format that supports
* [[VUID-vkCmdCopyBufferToImage-dstImage-00175]] pname:dstImage must: use a format that supports
ename:VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR, which is indicated by
sname:VkFormatProperties::pname:linearTilingFeatures (for linearly tiled
images) or sname:VkFormatProperties::pname:optimalTilingFeatures (for
optimally tiled images) - as returned by
flink:vkGetPhysicalDeviceFormatProperties
endif::VK_KHR_maintenance1[]
* If pname:srcBuffer is non-sparse then it must: be bound completely and
* [[VUID-vkCmdCopyBufferToImage-srcBuffer-00176]] If pname:srcBuffer is non-sparse then it must: be bound completely and
contiguously to a single sname:VkDeviceMemory object
* pname:dstImage must: have been created with
* [[VUID-vkCmdCopyBufferToImage-dstImage-00177]] pname:dstImage must: have been created with
ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT usage flag
* If pname:dstImage is non-sparse then it must: be bound completely and
* [[VUID-vkCmdCopyBufferToImage-dstImage-00178]] If pname:dstImage is non-sparse then it must: be bound completely and
contiguously to a single sname:VkDeviceMemory object
* pname:dstImage must: have a sample count equal to
* [[VUID-vkCmdCopyBufferToImage-dstImage-00179]] pname:dstImage must: have a sample count equal to
ename:VK_SAMPLE_COUNT_1_BIT
* pname:dstImageLayout must: specify the layout of the image subresources
* [[VUID-vkCmdCopyBufferToImage-dstImageLayout-00180]] pname:dstImageLayout must: specify the layout of the image subresources
of pname:dstImage specified in pname:pRegions at the time this command
is executed on a sname:VkDevice
* pname:dstImageLayout must: be ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL
or ename:VK_IMAGE_LAYOUT_GENERAL
* [[VUID-vkCmdCopyBufferToImage-dstImageLayout-00181]] pname:dstImageLayout must: be
ifdef::VK_KHR_shared_presentable_image[]
ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR,
endif::VK_KHR_shared_presentable_image[]
ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL or
ename:VK_IMAGE_LAYOUT_GENERAL
****
include::../validity/protos/vkCmdCopyBufferToImage.txt[]
@ -532,35 +547,39 @@ source image to the specified region of the destination buffer.
.Valid Usage
****
* The image region specified by a given element of pname:pRegions must: be
* [[VUID-vkCmdCopyImageToBuffer-pRegions-00182]] The image region specified by a given element of pname:pRegions must: be
a region that is contained within pname:srcImage
* The buffer region specified by a given element of pname:pRegions must:
* [[VUID-vkCmdCopyImageToBuffer-pRegions-00183]] The buffer region specified by a given element of pname:pRegions must:
be a region that is contained within pname:dstBuffer
* The union of all source regions, and the union of all destination
* [[VUID-vkCmdCopyImageToBuffer-pRegions-00184]] The union of all source regions, and the union of all destination
regions, specified by the elements of pname:pRegions, must: not overlap
in memory
ifdef::VK_KHR_maintenance1[]
* pname:srcImage must: use a format that supports
* [[VUID-vkCmdCopyImageToBuffer-srcImage-00185]] pname:srcImage must: use a format that supports
ename:VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR, which is indicated by
sname:VkFormatProperties::pname:linearTilingFeatures (for linearly tiled
images) or sname:VkFormatProperties::pname:optimalTilingFeatures (for
optimally tiled images) - as returned by
flink:vkGetPhysicalDeviceFormatProperties
endif::VK_KHR_maintenance1[]
* pname:srcImage must: have been created with
* [[VUID-vkCmdCopyImageToBuffer-srcImage-00186]] pname:srcImage must: have been created with
ename:VK_IMAGE_USAGE_TRANSFER_SRC_BIT usage flag
* If pname:srcImage is non-sparse then it must: be bound completely and
* [[VUID-vkCmdCopyImageToBuffer-srcImage-00187]] If pname:srcImage is non-sparse then it must: be bound completely and
contiguously to a single sname:VkDeviceMemory object
* pname:srcImage must: have a sample count equal to
* [[VUID-vkCmdCopyImageToBuffer-srcImage-00188]] pname:srcImage must: have a sample count equal to
ename:VK_SAMPLE_COUNT_1_BIT
* pname:srcImageLayout must: specify the layout of the image subresources
* [[VUID-vkCmdCopyImageToBuffer-srcImageLayout-00189]] pname:srcImageLayout must: specify the layout of the image subresources
of pname:srcImage specified in pname:pRegions at the time this command
is executed on a sname:VkDevice
* pname:srcImageLayout must: be ename:VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL
or ename:VK_IMAGE_LAYOUT_GENERAL
* pname:dstBuffer must: have been created with
* [[VUID-vkCmdCopyImageToBuffer-srcImageLayout-00190]] pname:srcImageLayout must: be
ifdef::VK_KHR_shared_presentable_image[]
ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR,
endif::VK_KHR_shared_presentable_image[]
ename:VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL or
ename:VK_IMAGE_LAYOUT_GENERAL
* [[VUID-vkCmdCopyImageToBuffer-dstBuffer-00191]] pname:dstBuffer must: have been created with
ename:VK_BUFFER_USAGE_TRANSFER_DST_BIT usage flag
* If pname:dstBuffer is non-sparse then it must: be bound completely and
* [[VUID-vkCmdCopyImageToBuffer-dstBuffer-00192]] If pname:dstBuffer is non-sparse then it must: be bound completely and
contiguously to a single sname:VkDeviceMemory object
****
@ -627,65 +646,65 @@ destination image.
.Valid Usage
****
* If the the calling command's sname:VkImage parameter's format is not a
* [[VUID-VkBufferImageCopy-bufferOffset-00193]] If the the calling command's sname:VkImage parameter's format is not a
depth/stencil format, then pname:bufferOffset must: be a multiple of the
format's element size
* pname:bufferOffset must: be a multiple of `4`
* pname:bufferRowLength must: be `0`, or greater than or equal to the
* [[VUID-VkBufferImageCopy-bufferOffset-00194]] pname:bufferOffset must: be a multiple of `4`
* [[VUID-VkBufferImageCopy-bufferRowLength-00195]] pname:bufferRowLength must: be `0`, or greater than or equal to the
pname:width member of pname:imageExtent
* pname:bufferImageHeight must: be `0`, or greater than or equal to the
* [[VUID-VkBufferImageCopy-bufferImageHeight-00196]] pname:bufferImageHeight must: be `0`, or greater than or equal to the
pname:height member of pname:imageExtent
* pname:imageOffset.x and (pname:imageExtent.width + pname:imageOffset.x)
* [[VUID-VkBufferImageCopy-imageOffset-00197]] pname:imageOffset.x and (pname:imageExtent.width + pname:imageOffset.x)
must: both be greater than or equal to `0` and less than or equal to the
image subresource width
* pname:imageOffset.y and (imageExtent.height + pname:imageOffset.y) must:
* [[VUID-VkBufferImageCopy-imageOffset-00198]] pname:imageOffset.y and (imageExtent.height + pname:imageOffset.y) must:
both be greater than or equal to `0` and less than or equal to the image
subresource height
* If the calling command's pname:srcImage (flink:vkCmdCopyImageToBuffer)
* [[VUID-VkBufferImageCopy-srcImage-00199]] If the calling command's pname:srcImage (flink:vkCmdCopyImageToBuffer)
or pname:dstImage (flink:vkCmdCopyBufferToImage) is of type
ename:VK_IMAGE_TYPE_1D, then pname:imageOffset.y must: be `0` and
pname:imageExtent.height must: be `1`.
* pname:imageOffset.z and (imageExtent.depth + pname:imageOffset.z) must:
* [[VUID-VkBufferImageCopy-imageOffset-00200]] pname:imageOffset.z and (imageExtent.depth + pname:imageOffset.z) must:
both be greater than or equal to `0` and less than or equal to the image
subresource depth
* If the calling command's pname:srcImage (flink:vkCmdCopyImageToBuffer)
* [[VUID-VkBufferImageCopy-srcImage-00201]] If the calling command's pname:srcImage (flink:vkCmdCopyImageToBuffer)
or pname:dstImage (flink:vkCmdCopyBufferToImage) is of type
ename:VK_IMAGE_TYPE_1D or ename:VK_IMAGE_TYPE_2D, then
pname:imageOffset.z must: be `0` and pname:imageExtent.depth must: be
`1`.
* If the calling command's sname:VkImage parameter is a compressed format
* [[VUID-VkBufferImageCopy-None-00202]] If the calling command's sname:VkImage parameter is a compressed format
image:
** pname:bufferRowLength must: be a multiple of the compressed texel block
** [[VUID-VkBufferImageCopy-bufferRowLength-00203]] pname:bufferRowLength must: be a multiple of the compressed texel block
width
** pname:bufferImageHeight must: be a multiple of the compressed texel
** [[VUID-VkBufferImageCopy-bufferImageHeight-00204]] pname:bufferImageHeight must: be a multiple of the compressed texel
block height
** all members of pname:imageOffset must: be a multiple of the
** [[VUID-VkBufferImageCopy-imageOffset-00205]] all members of pname:imageOffset must: be a multiple of the
corresponding dimensions of the compressed texel block
** pname:bufferOffset must: be a multiple of the compressed texel block
** [[VUID-VkBufferImageCopy-bufferOffset-00206]] pname:bufferOffset must: be a multiple of the compressed texel block
size in bytes
** pname:imageExtent.width must: be a multiple of the compressed texel
** [[VUID-VkBufferImageCopy-imageExtent-00207]] pname:imageExtent.width must: be a multiple of the compressed texel
block width or (pname:imageExtent.width + pname:imageOffset.x) must:
equal the image subresource width
** pname:imageExtent.height must: be a multiple of the compressed texel
** [[VUID-VkBufferImageCopy-imageExtent-00208]] pname:imageExtent.height must: be a multiple of the compressed texel
block height or (pname:imageExtent.height + pname:imageOffset.y) must:
equal the image subresource height
** pname:imageExtent.depth must: be a multiple of the compressed texel
** [[VUID-VkBufferImageCopy-imageExtent-00209]] pname:imageExtent.depth must: be a multiple of the compressed texel
block depth or (pname:imageExtent.depth + pname:imageOffset.z) must:
equal the image subresource depth
* pname:bufferOffset, pname:bufferRowLength, pname:bufferImageHeight and
* [[VUID-VkBufferImageCopy-bufferOffset-00210]] pname:bufferOffset, pname:bufferRowLength, pname:bufferImageHeight and
all members of pname:imageOffset and pname:imageExtent must: respect the
image transfer granularity requirements of the queue family that it will
be submitted against, as described in
<<devsandqueues-physical-device-enumeration,Physical Device
Enumeration>>
* The pname:aspectMask member of pname:imageSubresource must: specify
* [[VUID-VkBufferImageCopy-aspectMask-00211]] The pname:aspectMask member of pname:imageSubresource must: specify
aspects present in the calling command's sname:VkImage parameter
* The pname:aspectMask member of pname:imageSubresource must: only have a
* [[VUID-VkBufferImageCopy-aspectMask-00212]] The pname:aspectMask member of pname:imageSubresource must: only have a
single bit set
* If the calling command's sname:VkImage parameter is of elink:VkImageType
* [[VUID-VkBufferImageCopy-baseArrayLayer-00213]] If the calling command's sname:VkImage parameter is of elink:VkImageType
ename:VK_IMAGE_TYPE_3D, the pname:baseArrayLayer and pname:layerCount
members of pname:imageSubresource must: be `0` and `1`, respectively
* When copying to the depth aspect of an image subresource, the data in
* [[VUID-VkBufferImageCopy-None-00214]] When copying to the depth aspect of an image subresource, the data in
the source buffer must: be in the range [eq]#[0,1]#
****
@ -882,60 +901,68 @@ representable range of the destination format, then casting the value.
.Valid Usage
****
* The source region specified by a given element of pname:pRegions must:
* [[VUID-vkCmdBlitImage-pRegions-00215]] The source region specified by a given element of pname:pRegions must:
be a region that is contained within pname:srcImage
* The destination region specified by a given element of pname:pRegions
* [[VUID-vkCmdBlitImage-pRegions-00216]] The destination region specified by a given element of pname:pRegions
must: be a region that is contained within pname:dstImage
* The union of all destination regions, specified by the elements of
* [[VUID-vkCmdBlitImage-pRegions-00217]] The union of all destination regions, specified by the elements of
pname:pRegions, must: not overlap in memory with any texel that may: be
sampled during the blit operation
* pname:srcImage must: use a format that supports
* [[VUID-vkCmdBlitImage-srcImage-00218]] pname:srcImage must: use a format that supports
ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT, which is indicated by
sname:VkFormatProperties::pname:linearTilingFeatures (for linearly tiled
images) or sname:VkFormatProperties::pname:optimalTilingFeatures (for
optimally tiled images) - as returned by
fname:vkGetPhysicalDeviceFormatProperties
* pname:srcImage must: have been created with
* [[VUID-vkCmdBlitImage-srcImage-00219]] pname:srcImage must: have been created with
ename:VK_IMAGE_USAGE_TRANSFER_SRC_BIT usage flag
* If pname:srcImage is non-sparse then it must: be bound completely and
* [[VUID-vkCmdBlitImage-srcImage-00220]] If pname:srcImage is non-sparse then it must: be bound completely and
contiguously to a single sname:VkDeviceMemory object
* pname:srcImageLayout must: specify the layout of the image subresources
* [[VUID-vkCmdBlitImage-srcImageLayout-00221]] pname:srcImageLayout must: specify the layout of the image subresources
of pname:srcImage specified in pname:pRegions at the time this command
is executed on a sname:VkDevice
* pname:srcImageLayout must: be ename:VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL
or ename:VK_IMAGE_LAYOUT_GENERAL
* pname:dstImage must: use a format that supports
* [[VUID-vkCmdBlitImage-srcImageLayout-00222]] pname:srcImageLayout must: be
ifdef::VK_KHR_shared_presentable_image[]
ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR,
endif::VK_KHR_shared_presentable_image[]
ename:VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL or
ename:VK_IMAGE_LAYOUT_GENERAL
* [[VUID-vkCmdBlitImage-dstImage-00223]] pname:dstImage must: use a format that supports
ename:VK_FORMAT_FEATURE_BLIT_DST_BIT, which is indicated by
sname:VkFormatProperties::pname:linearTilingFeatures (for linearly tiled
images) or sname:VkFormatProperties::pname:optimalTilingFeatures (for
optimally tiled images) - as returned by
fname:vkGetPhysicalDeviceFormatProperties
* pname:dstImage must: have been created with
* [[VUID-vkCmdBlitImage-dstImage-00224]] pname:dstImage must: have been created with
ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT usage flag
* If pname:dstImage is non-sparse then it must: be bound completely and
* [[VUID-vkCmdBlitImage-dstImage-00225]] If pname:dstImage is non-sparse then it must: be bound completely and
contiguously to a single sname:VkDeviceMemory object
* pname:dstImageLayout must: specify the layout of the image subresources
* [[VUID-vkCmdBlitImage-dstImageLayout-00226]] pname:dstImageLayout must: specify the layout of the image subresources
of pname:dstImage specified in pname:pRegions at the time this command
is executed on a sname:VkDevice
* pname:dstImageLayout must: be ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL
or ename:VK_IMAGE_LAYOUT_GENERAL
* The sample count of pname:srcImage and pname:dstImage must: both be
* [[VUID-vkCmdBlitImage-dstImageLayout-00227]] pname:dstImageLayout must: be
ifdef::VK_KHR_shared_presentable_image[]
ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR,
endif::VK_KHR_shared_presentable_image[]
ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL or
ename:VK_IMAGE_LAYOUT_GENERAL
* [[VUID-vkCmdBlitImage-srcImage-00228]] The sample count of pname:srcImage and pname:dstImage must: both be
equal to ename:VK_SAMPLE_COUNT_1_BIT
* If either of pname:srcImage or pname:dstImage was created with a signed
* [[VUID-vkCmdBlitImage-srcImage-00229]] If either of pname:srcImage or pname:dstImage was created with a signed
integer elink:VkFormat, the other must: also have been created with a
signed integer elink:VkFormat
* If either of pname:srcImage or pname:dstImage was created with an
* [[VUID-vkCmdBlitImage-srcImage-00230]] If either of pname:srcImage or pname:dstImage was created with an
unsigned integer elink:VkFormat, the other must: also have been created
with an unsigned integer elink:VkFormat
* If either of pname:srcImage or pname:dstImage was created with a
* [[VUID-vkCmdBlitImage-srcImage-00231]] If either of pname:srcImage or pname:dstImage was created with a
depth/stencil format, the other must: have exactly the same format
* If pname:srcImage was created with a depth/stencil format, pname:filter
* [[VUID-vkCmdBlitImage-srcImage-00232]] If pname:srcImage was created with a depth/stencil format, pname:filter
must: be ename:VK_FILTER_NEAREST
* pname:srcImage must: have been created with a pname:samples value of
* [[VUID-vkCmdBlitImage-srcImage-00233]] pname:srcImage must: have been created with a pname:samples value of
ename:VK_SAMPLE_COUNT_1_BIT
* pname:dstImage must: have been created with a pname:samples value of
* [[VUID-vkCmdBlitImage-dstImage-00234]] pname:dstImage must: have been created with a pname:samples value of
ename:VK_SAMPLE_COUNT_1_BIT
* If pname:filter is ename:VK_FILTER_LINEAR, pname:srcImage must: be of a
* [[VUID-vkCmdBlitImage-filter-00235]] If pname:filter is ename:VK_FILTER_LINEAR, pname:srcImage must: be of a
format which supports linear filtering, as specified by the
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in
sname:VkFormatProperties::pname:linearTilingFeatures (for a linear
@ -943,14 +970,14 @@ representable range of the destination format, then casting the value.
optimally tiled image) returned by
fname:vkGetPhysicalDeviceFormatProperties
ifdef::VK_IMG_filter_cubic[]
* If pname:filter is ename:VK_FILTER_CUBIC_IMG, pname:srcImage must: be of
* [[VUID-vkCmdBlitImage-filter-00236]] If pname:filter is ename:VK_FILTER_CUBIC_IMG, pname:srcImage must: be of
a format which supports cubic filtering, as specified by the
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG flag in
sname:VkFormatProperties::pname:linearTilingFeatures (for a linear
image) or sname:VkFormatProperties::pname:optimalTilingFeatures(for an
optimally tiled image) returned by
fname:vkGetPhysicalDeviceFormatProperties
* If pname:filter is ename:VK_FILTER_CUBIC_IMG, pname:srcImage must: have
* [[VUID-vkCmdBlitImage-filter-00237]] If pname:filter is ename:VK_FILTER_CUBIC_IMG, pname:srcImage must: have
a elink:VkImageType of ename:VK_IMAGE_TYPE_3D
endif::VK_IMG_filter_cubic[]
****
@ -976,47 +1003,47 @@ the specified source and destination regions.
.Valid Usage
****
* The pname:aspectMask member of pname:srcSubresource and
* [[VUID-VkImageBlit-aspectMask-00238]] The pname:aspectMask member of pname:srcSubresource and
pname:dstSubresource must: match
* The pname:layerCount member of pname:srcSubresource and
* [[VUID-VkImageBlit-layerCount-00239]] The pname:layerCount member of pname:srcSubresource and
pname:dstSubresource must: match
* If either of the calling command's pname:srcImage or pname:dstImage
* [[VUID-VkImageBlit-srcImage-00240]] If either of the calling command's pname:srcImage or pname:dstImage
parameters are of elink:VkImageType ename:VK_IMAGE_TYPE_3D, the
pname:baseArrayLayer and pname:layerCount members of both
pname:srcSubresource and pname:dstSubresource must: be `0` and `1`,
respectively
* The pname:aspectMask member of pname:srcSubresource must: specify
* [[VUID-VkImageBlit-aspectMask-00241]] The pname:aspectMask member of pname:srcSubresource must: specify
aspects present in the calling command's pname:srcImage
* The pname:aspectMask member of pname:dstSubresource must: specify
* [[VUID-VkImageBlit-aspectMask-00242]] The pname:aspectMask member of pname:dstSubresource must: specify
aspects present in the calling command's pname:dstImage
* pname:srcOffset[0].pname:x and pname:srcOffset[1].pname:x must: both be
* [[VUID-VkImageBlit-srcOffset-00243]] pname:srcOffset[0].pname:x and pname:srcOffset[1].pname:x must: both be
greater than or equal to `0` and less than or equal to the source image
subresource width
* pname:srcOffset[0].pname:y and pname:srcOffset[1].pname:y must: both be
* [[VUID-VkImageBlit-srcOffset-00244]] pname:srcOffset[0].pname:y and pname:srcOffset[1].pname:y must: both be
greater than or equal to `0` and less than or equal to the source image
subresource height
* If the calling command's pname:srcImage is of type
* [[VUID-VkImageBlit-srcImage-00245]] If the calling command's pname:srcImage is of type
ename:VK_IMAGE_TYPE_1D, then pname:srcOffset[0].y must: be `0` and
pname:srcOffset[1].y must: be `1`.
* pname:srcOffset[0].pname:z and pname:srcOffset[1].pname:z must: both be
* [[VUID-VkImageBlit-srcOffset-00246]] pname:srcOffset[0].pname:z and pname:srcOffset[1].pname:z must: both be
greater than or equal to `0` and less than or equal to the source image
subresource depth
* If the calling command's pname:srcImage is of type
* [[VUID-VkImageBlit-srcImage-00247]] If the calling command's pname:srcImage is of type
ename:VK_IMAGE_TYPE_1D or ename:VK_IMAGE_TYPE_2D, then
pname:srcOffset[0].z must: be `0` and pname:srcOffset[1].z must: be `1`.
* pname:dstOffset[0].pname:x and pname:dstOffset[1].pname:x must: both be
* [[VUID-VkImageBlit-dstOffset-00248]] pname:dstOffset[0].pname:x and pname:dstOffset[1].pname:x must: both be
greater than or equal to `0` and less than or equal to the destination
image subresource width
* pname:dstOffset[0].pname:y and pname:dstOffset[1].pname:y must: both be
* [[VUID-VkImageBlit-dstOffset-00249]] pname:dstOffset[0].pname:y and pname:dstOffset[1].pname:y must: both be
greater than or equal to `0` and less than or equal to the destination
image subresource height
* If the calling command's pname:dstImage is of type
* [[VUID-VkImageBlit-dstImage-00250]] If the calling command's pname:dstImage is of type
ename:VK_IMAGE_TYPE_1D, then pname:dstOffset[0].y must: be `0` and
pname:dstOffset[1].y must: be `1`.
* pname:dstOffset[0].pname:z and pname:dstOffset[1].pname:z must: both be
* [[VUID-VkImageBlit-dstOffset-00251]] pname:dstOffset[0].pname:z and pname:dstOffset[1].pname:z must: both be
greater than or equal to `0` and less than or equal to the destination
image subresource depth
* If the calling command's pname:dstImage is of type
* [[VUID-VkImageBlit-dstImage-00252]] If the calling command's pname:dstImage is of type
ename:VK_IMAGE_TYPE_1D or ename:VK_IMAGE_TYPE_2D, then
pname:dstOffset[0].z must: be `0` and pname:dstOffset[1].z must: be `1`.
****
@ -1065,38 +1092,46 @@ pname:layerCount layers are resolved to the destination image.
.Valid Usage
****
* The source region specified by a given element of pname:pRegions must:
* [[VUID-vkCmdResolveImage-pRegions-00253]] The source region specified by a given element of pname:pRegions must:
be a region that is contained within pname:srcImage
* The destination region specified by a given element of pname:pRegions
* [[VUID-vkCmdResolveImage-pRegions-00254]] The destination region specified by a given element of pname:pRegions
must: be a region that is contained within pname:dstImage
* The union of all source regions, and the union of all destination
* [[VUID-vkCmdResolveImage-pRegions-00255]] The union of all source regions, and the union of all destination
regions, specified by the elements of pname:pRegions, must: not overlap
in memory
* If pname:srcImage is non-sparse then it must: be bound completely and
* [[VUID-vkCmdResolveImage-srcImage-00256]] If pname:srcImage is non-sparse then it must: be bound completely and
contiguously to a single sname:VkDeviceMemory object
* pname:srcImage must: have a sample count equal to any valid sample count
* [[VUID-vkCmdResolveImage-srcImage-00257]] pname:srcImage must: have a sample count equal to any valid sample count
value other than ename:VK_SAMPLE_COUNT_1_BIT
* If pname:dstImage is non-sparse then it must: be bound completely and
* [[VUID-vkCmdResolveImage-dstImage-00258]] If pname:dstImage is non-sparse then it must: be bound completely and
contiguously to a single sname:VkDeviceMemory object
* pname:dstImage must: have a sample count equal to
* [[VUID-vkCmdResolveImage-dstImage-00259]] pname:dstImage must: have a sample count equal to
ename:VK_SAMPLE_COUNT_1_BIT
* pname:srcImageLayout must: specify the layout of the image subresources
* [[VUID-vkCmdResolveImage-srcImageLayout-00260]] pname:srcImageLayout must: specify the layout of the image subresources
of pname:srcImage specified in pname:pRegions at the time this command
is executed on a sname:VkDevice
* pname:srcImageLayout must: be ename:VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL
or ename:VK_IMAGE_LAYOUT_GENERAL
* pname:dstImageLayout must: specify the layout of the image subresources
* [[VUID-vkCmdResolveImage-srcImageLayout-00261]] pname:srcImageLayout must: be
ifdef::VK_KHR_shared_presentable_image[]
ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR,
endif::VK_KHR_shared_presentable_image[]
ename:VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL or
ename:VK_IMAGE_LAYOUT_GENERAL
* [[VUID-vkCmdResolveImage-dstImageLayout-00262]] pname:dstImageLayout must: specify the layout of the image subresources
of pname:dstImage specified in pname:pRegions at the time this command
is executed on a sname:VkDevice
* pname:dstImageLayout must: be ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL
or ename:VK_IMAGE_LAYOUT_GENERAL
* If pname:dstImage was created with pname:tiling equal to
* [[VUID-vkCmdResolveImage-dstImageLayout-00263]] pname:dstImageLayout must: be
ifdef::VK_KHR_shared_presentable_image[]
ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR,
endif::VK_KHR_shared_presentable_image[]
ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL or
ename:VK_IMAGE_LAYOUT_GENERAL
* [[VUID-vkCmdResolveImage-dstImage-00264]] If pname:dstImage was created with pname:tiling equal to
ename:VK_IMAGE_TILING_LINEAR, pname:dstImage must: have been created
with a pname:format that supports being a color attachment, as specified
by the ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT flag in
sname:VkFormatProperties::pname:linearTilingFeatures returned by
fname:vkGetPhysicalDeviceFormatProperties
* If pname:dstImage was created with pname:tiling equal to
* [[VUID-vkCmdResolveImage-dstImage-00265]] If pname:dstImage was created with pname:tiling equal to
ename:VK_IMAGE_TILING_OPTIMAL, pname:dstImage must: have been created
with a pname:format that supports being a color attachment, as specified
by the ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT flag in
@ -1125,43 +1160,43 @@ include::../api/structs/VkImageResolve.txt[]
.Valid Usage
****
* The pname:aspectMask member of pname:srcSubresource and
* [[VUID-VkImageResolve-aspectMask-00266]] The pname:aspectMask member of pname:srcSubresource and
pname:dstSubresource must: only contain ename:VK_IMAGE_ASPECT_COLOR_BIT
* The pname:layerCount member of pname:srcSubresource and
* [[VUID-VkImageResolve-layerCount-00267]] The pname:layerCount member of pname:srcSubresource and
pname:dstSubresource must: match
* If either of the calling command's pname:srcImage or pname:dstImage
* [[VUID-VkImageResolve-srcImage-00268]] If either of the calling command's pname:srcImage or pname:dstImage
parameters are of elink:VkImageType ename:VK_IMAGE_TYPE_3D, the
pname:baseArrayLayer and pname:layerCount members of both
pname:srcSubresource and pname:dstSubresource must: be `0` and `1`,
respectively
* pname:srcOffset.x and (pname:extent.width + pname:srcOffset.x) must:
* [[VUID-VkImageResolve-srcOffset-00269]] pname:srcOffset.x and (pname:extent.width + pname:srcOffset.x) must:
both be greater than or equal to `0` and less than or equal to the
source image subresource width
* pname:srcOffset.y and (pname:extent.height + pname:srcOffset.y) must:
* [[VUID-VkImageResolve-srcOffset-00270]] pname:srcOffset.y and (pname:extent.height + pname:srcOffset.y) must:
both be greater than or equal to `0` and less than or equal to the
source image subresource height
* If the calling command's pname:srcImage is of type
* [[VUID-VkImageResolve-srcImage-00271]] If the calling command's pname:srcImage is of type
ename:VK_IMAGE_TYPE_1D, then pname:srcOffset.y must: be `0` and
pname:extent.height must: be `1`.
* pname:srcOffset.z and (pname:extent.depth + pname:srcOffset.z) must:
* [[VUID-VkImageResolve-srcOffset-00272]] pname:srcOffset.z and (pname:extent.depth + pname:srcOffset.z) must:
both be greater than or equal to `0` and less than or equal to the
source image subresource depth
* If the calling command's pname:srcImage is of type
* [[VUID-VkImageResolve-srcImage-00273]] If the calling command's pname:srcImage is of type
ename:VK_IMAGE_TYPE_1D or ename:VK_IMAGE_TYPE_2D, then pname:srcOffset.z
must: be `0` and pname:extent.depth must: be `1`.
* pname:dstOffset.x and (pname:extent.width + pname:dstOffset.x) must:
* [[VUID-VkImageResolve-dstOffset-00274]] pname:dstOffset.x and (pname:extent.width + pname:dstOffset.x) must:
both be greater than or equal to `0` and less than or equal to the
destination image subresource width
* pname:dstOffset.y and (pname:extent.height + pname:dstOffset.y) must:
* [[VUID-VkImageResolve-dstOffset-00275]] pname:dstOffset.y and (pname:extent.height + pname:dstOffset.y) must:
both be greater than or equal to `0` and less than or equal to the
destination image subresource height
* If the calling command's pname:dstImage is of type
* [[VUID-VkImageResolve-dstImage-00276]] If the calling command's pname:dstImage is of type
ename:VK_IMAGE_TYPE_1D, then pname:dstOffset.y must: be `0` and
pname:extent.height must: be `1`.
* pname:dstOffset.z and (pname:extent.depth + pname:dstOffset.z) must:
* [[VUID-VkImageResolve-dstOffset-00277]] pname:dstOffset.z and (pname:extent.depth + pname:dstOffset.z) must:
both be greater than or equal to `0` and less than or equal to the
destination image subresource depth
* If the calling command's pname:dstImage is of type
* [[VUID-VkImageResolve-dstImage-00278]] If the calling command's pname:dstImage is of type
ename:VK_IMAGE_TYPE_1D or ename:VK_IMAGE_TYPE_2D, then pname:dstOffset.z
must: be `0` and pname:extent.depth must: be `1`.
****

View File

@ -3,6 +3,16 @@
To aid developers in tracking down errors in the application's use of
Vulkan, particularly in combination with an external debugger or profiler,
_debugging extensions_ may be available.
// refBegin VkObjectType Specify an enumeration to track object handle types
The elink:VkObjectType enumeration defines values, each of which corresponds
to a specific Vulkan handle type. These values can: be used to associate
debug information with a particular type of object through one or more
extensions.
include::../api/enums/VkObjectType.txt[]
// refEnd VkObjectType
If this Specification was generated with any such extensions included, they
will be described in the remainder of this chapter.

View File

@ -118,7 +118,11 @@ formats which report support for the
feature.
Load and store operations on storage images can: only be done on images in
the ename:VK_IMAGE_LAYOUT_GENERAL layout.
the
ifdef::VK_KHR_shared_presentable_image[]
ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR or
endif::VK_KHR_shared_presentable_image[]
ename:VK_IMAGE_LAYOUT_GENERAL layout.
When the <<features-features-fragmentStoresAndAtomics,
pname:fragmentStoresAndAtomics>> feature is enabled, stores and atomic
@ -321,16 +325,15 @@ layout (set=m, binding=n) uniform samplerBuffer myUniformTexelBuffer;
...
%1 = OpExtInstImport "GLSL.std.450"
...
OpName %10 "myUniformTexelBuffer"
OpDecorate %10 DescriptorSet m
OpDecorate %10 Binding n
OpName %9 "myUniformTexelBuffer"
OpDecorate %9 DescriptorSet m
OpDecorate %9 Binding n
%2 = OpTypeVoid
%3 = OpTypeFunction %2
%6 = OpTypeFloat 32
%7 = OpTypeImage %6 Buffer 0 0 0 1 Unknown
%8 = OpTypeSampledImage %7
%9 = OpTypePointer UniformConstant %8
%10 = OpVariable %9 UniformConstant
%8 = OpTypePointer UniformConstant %7
%9 = OpVariable %8 UniformConstant
...
---------------------------------------------------
@ -634,15 +637,15 @@ endif::VK_KHR_push_descriptor[]
.Valid Usage
****
* The slink:VkDescriptorSetLayoutBinding::pname:binding members of the
* [[VUID-VkDescriptorSetLayoutCreateInfo-binding-00279]] The slink:VkDescriptorSetLayoutBinding::pname:binding members of the
elements of the pname:pBindings array must: each have different values.
ifdef::VK_KHR_push_descriptor[]
* If pname:flags contains
* [[VUID-VkDescriptorSetLayoutCreateInfo-flags-00280]] If pname:flags contains
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR, then all
elements of pname:pBindings must: not have a pname:descriptorType of
ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC or
ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC
* If pname:flags contains
* [[VUID-VkDescriptorSetLayoutCreateInfo-flags-00281]] If pname:flags contains
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR, then the
total number of elements of all bindings must: be less than or equal to
slink:VkPhysicalDevicePushDescriptorPropertiesKHR::pname:maxPushDescriptors
@ -719,12 +722,12 @@ avoid wasted memory.
.Valid Usage
****
* If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_SAMPLER or
* [[VUID-VkDescriptorSetLayoutBinding-descriptorType-00282]] If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_SAMPLER or
ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, and
pname:descriptorCount is not `0` and pname:pImmutableSamplers is not
`NULL`, pname:pImmutableSamplers must: be a pointer to an array of
pname:descriptorCount valid sname:VkSampler handles
* If pname:descriptorCount is not `0`, pname:stageFlags must: be a valid
* [[VUID-VkDescriptorSetLayoutBinding-descriptorCount-00283]] If pname:descriptorCount is not `0`, pname:stageFlags must: be a valid
combination of elink:VkShaderStageFlagBits values
****
@ -886,10 +889,10 @@ include::../api/protos/vkDestroyDescriptorSetLayout.txt[]
.Valid Usage
****
* If sname:VkAllocationCallbacks were provided when
* [[VUID-vkDestroyDescriptorSetLayout-descriptorSetLayout-00284]] If sname:VkAllocationCallbacks were provided when
pname:descriptorSetLayout was created, a compatible set of callbacks
must: be provided here
* If no sname:VkAllocationCallbacks were provided when
* [[VUID-vkDestroyDescriptorSetLayout-descriptorSetLayout-00285]] If no sname:VkAllocationCallbacks were provided when
pname:descriptorSetLayout was created, pname:pAllocator must: be `NULL`
****
@ -965,43 +968,43 @@ pipelines that is expected to outperform memory-backed resource updates.
.Valid Usage
****
* pname:setLayoutCount must: be less than or equal to
* [[VUID-VkPipelineLayoutCreateInfo-setLayoutCount-00286]] pname:setLayoutCount must: be less than or equal to
sname:VkPhysicalDeviceLimits::pname:maxBoundDescriptorSets
* The total number of descriptors of the type
* [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-00287]] The total number of descriptors of the type
ename:VK_DESCRIPTOR_TYPE_SAMPLER and
ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER accessible to any given
shader stage across all elements of pname:pSetLayouts must: be less than
or equal to
sname:VkPhysicalDeviceLimits::pname:maxPerStageDescriptorSamplers
* The total number of descriptors of the type
* [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-00288]] The total number of descriptors of the type
ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER and
ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC accessible to any given
shader stage across all elements of pname:pSetLayouts must: be less than
or equal to
sname:VkPhysicalDeviceLimits::pname:maxPerStageDescriptorUniformBuffers
* The total number of descriptors of the type
* [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-00289]] The total number of descriptors of the type
ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER and
ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC accessible to any given
shader stage across all elements of pname:pSetLayouts must: be less than
or equal to
sname:VkPhysicalDeviceLimits::pname:maxPerStageDescriptorStorageBuffers
* The total number of descriptors of the type
* [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-00290]] The total number of descriptors of the type
ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, and
ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER accessible to any given
shader stage across all elements of pname:pSetLayouts must: be less than
or equal to
sname:VkPhysicalDeviceLimits::pname:maxPerStageDescriptorSampledImages
* The total number of descriptors of the type
* [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-00291]] The total number of descriptors of the type
ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, and
ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER accessible to any given
shader stage across all elements of pname:pSetLayouts must: be less than
or equal to
sname:VkPhysicalDeviceLimits::pname:maxPerStageDescriptorStorageImages
* Any two elements of pname:pPushConstantRanges must: not include the same
* [[VUID-VkPipelineLayoutCreateInfo-pPushConstantRanges-00292]] Any two elements of pname:pPushConstantRanges must: not include the same
stage in pname:stageFlags
ifdef::VK_KHR_push_descriptor[]
* pname:pSetLayouts must: not contain more than one descriptor set layout
* [[VUID-VkPipelineLayoutCreateInfo-pSetLayouts-00293]] pname:pSetLayouts must: not contain more than one descriptor set layout
that was created with
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR set
endif::VK_KHR_push_descriptor[]
@ -1028,12 +1031,12 @@ include::../api/structs/VkPushConstantRange.txt[]
.Valid Usage
****
* pname:offset must: be less than
* [[VUID-VkPushConstantRange-offset-00294]] pname:offset must: be less than
sname:VkPhysicalDeviceLimits::pname:maxPushConstantsSize
* pname:offset must: be a multiple of `4`
* pname:size must: be greater than `0`
* pname:size must: be a multiple of `4`
* pname:size must: be less than or equal to
* [[VUID-VkPushConstantRange-offset-00295]] pname:offset must: be a multiple of `4`
* [[VUID-VkPushConstantRange-size-00296]] pname:size must: be greater than `0`
* [[VUID-VkPushConstantRange-size-00297]] pname:size must: be a multiple of `4`
* [[VUID-VkPushConstantRange-size-00298]] pname:size must: be less than or equal to
sname:VkPhysicalDeviceLimits::pname:maxPushConstantsSize minus
pname:offset
****
@ -1122,9 +1125,9 @@ include::../api/protos/vkDestroyPipelineLayout.txt[]
.Valid Usage
****
* If sname:VkAllocationCallbacks were provided when pname:pipelineLayout
* [[VUID-vkDestroyPipelineLayout-pipelineLayout-00299]] If sname:VkAllocationCallbacks were provided when pname:pipelineLayout
was created, a compatible set of callbacks must: be provided here
* If no sname:VkAllocationCallbacks were provided when
* [[VUID-vkDestroyPipelineLayout-pipelineLayout-00300]] If no sname:VkAllocationCallbacks were provided when
pname:pipelineLayout was created, pname:pAllocator must: be `NULL`
****
@ -1326,7 +1329,7 @@ allocations.
.Valid Usage
****
* pname:maxSets must: be greater than `0`
* [[VUID-VkDescriptorPoolCreateInfo-maxSets-00301]] pname:maxSets must: be greater than `0`
****
include::../validity/structs/VkDescriptorPoolCreateInfo.txt[]
@ -1343,7 +1346,7 @@ include::../api/structs/VkDescriptorPoolSize.txt[]
.Valid Usage
****
* pname:descriptorCount must: be greater than `0`
* [[VUID-VkDescriptorPoolSize-descriptorCount-00302]] pname:descriptorCount must: be greater than `0`
****
include::../validity/structs/VkDescriptorPoolSize.txt[]
@ -1366,11 +1369,11 @@ destroying that descriptor pool.
.Valid Usage
****
* All submitted commands that refer to pname:descriptorPool (via any
* [[VUID-vkDestroyDescriptorPool-descriptorPool-00303]] All submitted commands that refer to pname:descriptorPool (via any
allocated descriptor sets) must: have completed execution
* If sname:VkAllocationCallbacks were provided when pname:descriptorPool
* [[VUID-vkDestroyDescriptorPool-descriptorPool-00304]] If sname:VkAllocationCallbacks were provided when pname:descriptorPool
was created, a compatible set of callbacks must: be provided here
* If no sname:VkAllocationCallbacks were provided when
* [[VUID-vkDestroyDescriptorPool-descriptorPool-00305]] If no sname:VkAllocationCallbacks were provided when
pname:descriptorPool was created, pname:pAllocator must: be `NULL`
****
@ -1480,12 +1483,12 @@ include::../api/structs/VkDescriptorSetAllocateInfo.txt[]
ifndef::VK_KHR_maintenance1[]
.Valid Usage
****
* pname:descriptorSetCount must: not be greater than the number of sets
* [[VUID-VkDescriptorSetAllocateInfo-descriptorSetCount-00306]] pname:descriptorSetCount must: not be greater than the number of sets
that are currently available for allocation in pname:descriptorPool
* pname:descriptorPool must: have enough free descriptor capacity
* [[VUID-VkDescriptorSetAllocateInfo-descriptorPool-00307]] pname:descriptorPool must: have enough free descriptor capacity
remaining to allocate the descriptor sets of the specified layouts
ifdef::VK_KHR_push_descriptor[]
* Any given element of pname:pSetLayouts must: not have been created with
* [[VUID-VkDescriptorSetAllocateInfo-pSetLayouts-00308]] Any given element of pname:pSetLayouts must: not have been created with
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR set
endif::VK_KHR_push_descriptor[]
****
@ -1512,14 +1515,14 @@ in pname:pDescriptorSets are invalid.
.Valid Usage
****
* All submitted commands that refer to any element of
* [[VUID-vkFreeDescriptorSets-pDescriptorSets-00309]] All submitted commands that refer to any element of
pname:pDescriptorSets must: have completed execution
* pname:pDescriptorSets must: be a pointer to an array of
* [[VUID-vkFreeDescriptorSets-pDescriptorSets-00310]] pname:pDescriptorSets must: be a pointer to an array of
pname:descriptorSetCount sname:VkDescriptorSet handles, each element of
which must: either be a valid handle or dlink:VK_NULL_HANDLE
* Each valid handle in pname:pDescriptorSets must: have been allocated
* [[VUID-vkFreeDescriptorSets-pDescriptorSets-00311]] Each valid handle in pname:pDescriptorSets must: have been allocated
from pname:descriptorPool
* pname:descriptorPool must: have been created with the
* [[VUID-vkFreeDescriptorSets-descriptorPool-00312]] pname:descriptorPool must: have been created with the
ename:VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT flag
****
@ -1542,7 +1545,7 @@ pool, and the descriptor sets are implicitly freed.
.Valid Usage
****
* All uses of pname:descriptorPool (via any allocated descriptor sets)
* [[VUID-vkResetDescriptorPool-descriptorPool-00313]] All uses of pname:descriptorPool (via any allocated descriptor sets)
must: have completed execution
****
@ -1593,7 +1596,7 @@ buffer becomes <<commandbuffers-lifecycle, invalid>>.
.Valid Usage
****
* The pname:dstSet member of any given element of pname:pDescriptorWrites
* [[VUID-vkUpdateDescriptorSets-dstSet-00314]] The pname:dstSet member of any given element of pname:pDescriptorWrites
or pname:pDescriptorCopies must: not be used by any command that was
recorded to a command buffer which is in the <<commandbuffers-lifecycle,
pending state>>.
@ -1646,107 +1649,108 @@ bindings as needed to update all pname:descriptorCount descriptors.
.Valid Usage
****
* pname:dstBinding must: be less than or equal to the maximum value of
* [[VUID-VkWriteDescriptorSet-dstBinding-00315]] pname:dstBinding must: be less than or equal to the maximum value of
pname:binding of all slink:VkDescriptorSetLayoutBinding structures
specified when pname:dstSet's descriptor set layout was created
* pname:dstBinding must: be a binding with a non-zero
* [[VUID-VkWriteDescriptorSet-dstBinding-00316]] pname:dstBinding must: be a binding with a non-zero
pname:descriptorCount
* All consecutive bindings updated via a single sname:VkWriteDescriptorSet
* [[VUID-VkWriteDescriptorSet-descriptorCount-00317]] All consecutive bindings updated via a single sname:VkWriteDescriptorSet
structure, except those with a pname:descriptorCount of zero, must: have
identical pname:descriptorType and pname:stageFlags.
* All consecutive bindings updated via a single sname:VkWriteDescriptorSet
* [[VUID-VkWriteDescriptorSet-descriptorCount-00318]] All consecutive bindings updated via a single sname:VkWriteDescriptorSet
structure, except those with a pname:descriptorCount of zero, must: all
either use immutable samplers or must: all not use immutable samplers.
* pname:descriptorType must: match the type of pname:dstBinding within
* [[VUID-VkWriteDescriptorSet-descriptorType-00319]] pname:descriptorType must: match the type of pname:dstBinding within
pname:dstSet
* The sum of pname:dstArrayElement and pname:descriptorCount must: be less
* [[VUID-VkWriteDescriptorSet-dstSet-00320]] pname:dstSet must: be a valid slink:VkDescriptorSet handle
* [[VUID-VkWriteDescriptorSet-dstArrayElement-00321]] The sum of pname:dstArrayElement and pname:descriptorCount must: be less
than or equal to the number of array elements in the descriptor set
binding specified by pname:dstBinding, and all applicable consecutive
bindings, as described by <<descriptorsets-updates-consecutive>>
* If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_SAMPLER,
* [[VUID-VkWriteDescriptorSet-descriptorType-00322]] If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_SAMPLER,
ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE,
ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or
ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, pname:pImageInfo must: be a
pointer to an array of pname:descriptorCount valid
sname:VkDescriptorImageInfo structures
* If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER
* [[VUID-VkWriteDescriptorSet-descriptorType-00323]] If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER
or ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER, pname:pTexelBufferView
must: be a pointer to an array of pname:descriptorCount valid
sname:VkBufferView handles
* If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
* [[VUID-VkWriteDescriptorSet-descriptorType-00324]] If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, or
ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, pname:pBufferInfo must:
be a pointer to an array of pname:descriptorCount valid
sname:VkDescriptorBufferInfo structures
* If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_SAMPLER or
* [[VUID-VkWriteDescriptorSet-descriptorType-00325]] If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_SAMPLER or
ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, and pname:dstSet was
not allocated with a layout that included immutable samplers for
pname:dstBinding with pname:descriptorType, the pname:sampler member of
any given element of pname:pImageInfo must: be a valid sname:VkSampler
object
* If pname:descriptorType is
* [[VUID-VkWriteDescriptorSet-descriptorType-00326]] If pname:descriptorType is
ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE,
ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, or
ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, the pname:imageView and
pname:imageLayout members of any given element of pname:pImageInfo must:
be a valid sname:VkImageView and elink:VkImageLayout, respectively
* If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or
* [[VUID-VkWriteDescriptorSet-descriptorType-00327]] If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or
ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, the pname:offset member
of any given element of pname:pBufferInfo must: be a multiple of
sname:VkPhysicalDeviceLimits::pname:minUniformBufferOffsetAlignment
* If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or
* [[VUID-VkWriteDescriptorSet-descriptorType-00328]] If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or
ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, the pname:offset member
of any given element of pname:pBufferInfo must: be a multiple of
sname:VkPhysicalDeviceLimits::pname:minStorageBufferOffsetAlignment
* If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
* [[VUID-VkWriteDescriptorSet-descriptorType-00329]] If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC,
ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, or
ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, the pname:buffer member
of any given element of pname:pBufferInfo that is non-sparse must: be
bound completely and contiguously to a single sname:VkDeviceMemory
object
* If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or
* [[VUID-VkWriteDescriptorSet-descriptorType-00330]] If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or
ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, the pname:buffer member
of any given element of pname:pBufferInfo must: have been created with
ename:VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT set
* If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or
* [[VUID-VkWriteDescriptorSet-descriptorType-00331]] If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or
ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, the pname:buffer member
of any given element of pname:pBufferInfo must: have been created with
ename:VK_BUFFER_USAGE_STORAGE_BUFFER_BIT set
* If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or
* [[VUID-VkWriteDescriptorSet-descriptorType-00332]] If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER or
ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, the pname:range member
of any given element of pname:pBufferInfo, or the effective range if
pname:range is ename:VK_WHOLE_SIZE, must: be less than or equal to
sname:VkPhysicalDeviceLimits::pname:maxUniformBufferRange
* If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or
* [[VUID-VkWriteDescriptorSet-descriptorType-00333]] If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER or
ename:VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, the pname:range member
of any given element of pname:pBufferInfo, or the effective range if
pname:range is ename:VK_WHOLE_SIZE, must: be less than or equal to
sname:VkPhysicalDeviceLimits::pname:maxStorageBufferRange
* If pname:descriptorType is
* [[VUID-VkWriteDescriptorSet-descriptorType-00334]] If pname:descriptorType is
ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER, the sname:VkBuffer that
any given element of pname:pTexelBufferView was created from must: have
been created with ename:VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT set
* If pname:descriptorType is
* [[VUID-VkWriteDescriptorSet-descriptorType-00335]] If pname:descriptorType is
ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER, the sname:VkBuffer that
any given element of pname:pTexelBufferView was created from must: have
been created with ename:VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT set
* If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE or
* [[VUID-VkWriteDescriptorSet-descriptorType-00336]] If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE or
ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, the pname:imageView member of
any given element of pname:pImageInfo must: have been created with the
identity swizzle
* If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE or
* [[VUID-VkWriteDescriptorSet-descriptorType-00337]] If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE or
ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, the pname:imageView
member of any given element of pname:pImageInfo must: have been created
with ename:VK_IMAGE_USAGE_SAMPLED_BIT set
* If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT,
* [[VUID-VkWriteDescriptorSet-descriptorType-00338]] If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT,
the pname:imageView member of any given element of pname:pImageInfo
must: have been created with ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT
set
* If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, the
* [[VUID-VkWriteDescriptorSet-descriptorType-00339]] If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, the
pname:imageView member of any given element of pname:pImageInfo must:
have been created with ename:VK_IMAGE_USAGE_STORAGE_BIT set
****
@ -1820,10 +1824,10 @@ pname:range is the static size used for all dynamic offsets.
.Valid Usage
****
* pname:offset must: be less than the size of pname:buffer
* If pname:range is not equal to ename:VK_WHOLE_SIZE, pname:range must: be
* [[VUID-VkDescriptorBufferInfo-offset-00340]] pname:offset must: be less than the size of pname:buffer
* [[VUID-VkDescriptorBufferInfo-range-00341]] If pname:range is not equal to ename:VK_WHOLE_SIZE, pname:range must: be
greater than `0`
* If pname:range is not equal to ename:VK_WHOLE_SIZE, pname:range must: be
* [[VUID-VkDescriptorBufferInfo-range-00342]] If pname:range is not equal to ename:VK_WHOLE_SIZE, pname:range must: be
less than or equal to the size of pname:buffer minus pname:offset
****
@ -1855,13 +1859,16 @@ include::../api/structs/VkDescriptorImageInfo.txt[]
Members of sname:VkDescriptorImageInfo that are not used in an update (as
described above) are ignored.
ifdef::VK_KHR_maintenance1[]
.Valid Usage
****
* pname:imageView must: not be 2D or 2D array image view created from a 3D
ifdef::VK_KHR_maintenance1[]
* [[VUID-VkDescriptorImageInfo-imageView-00343]] pname:imageView must: not be 2D or 2D array image view created from a 3D
image
****
endif::VK_KHR_maintenance1[]
* [[VUID-VkDescriptorImageInfo-imageLayout-00344]] pname:imageLayout must: match the actual elink:VkImageLayout of each subresource
accessible from pname:imageView at the time this descriptor is accessed
****
include::../validity/structs/VkDescriptorImageInfo.txt[]
@ -1885,17 +1892,17 @@ include::../api/structs/VkCopyDescriptorSet.txt[]
.Valid Usage
****
* pname:srcBinding must: be a valid binding within pname:srcSet
* The sum of pname:srcArrayElement and pname:descriptorCount must: be less
* [[VUID-VkCopyDescriptorSet-srcBinding-00345]] pname:srcBinding must: be a valid binding within pname:srcSet
* [[VUID-VkCopyDescriptorSet-srcArrayElement-00346]] The sum of pname:srcArrayElement and pname:descriptorCount must: be less
than or equal to the number of array elements in the descriptor set
binding specified by pname:srcBinding, and all applicable consecutive
bindings, as described by <<descriptorsets-updates-consecutive>>
* pname:dstBinding must: be a valid binding within pname:dstSet
* The sum of pname:dstArrayElement and pname:descriptorCount must: be less
* [[VUID-VkCopyDescriptorSet-dstBinding-00347]] pname:dstBinding must: be a valid binding within pname:dstSet
* [[VUID-VkCopyDescriptorSet-dstArrayElement-00348]] The sum of pname:dstArrayElement and pname:descriptorCount must: be less
than or equal to the number of array elements in the descriptor set
binding specified by pname:dstBinding, and all applicable consecutive
bindings, as described by <<descriptorsets-updates-consecutive>>
* If pname:srcSet is equal to pname:dstSet, then the source and
* [[VUID-VkCopyDescriptorSet-srcSet-00349]] If pname:srcSet is equal to pname:dstSet, then the source and
destination ranges of descriptors must: not overlap, where the ranges
may: include array elements from consecutive bindings as described by
<<descriptorsets-updates-consecutive>>
@ -2038,18 +2045,18 @@ endif::VK_KHR_push_descriptor[]
.Valid Usage
****
* If pname:templateType is
* [[VUID-VkDescriptorUpdateTemplateCreateInfoKHR-templateType-00350]] If pname:templateType is
ename:VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET_KHR,
pname:descriptorSetLayout must: be a valid sname:VkDescriptorSetLayout
handle
ifdef::VK_KHR_push_descriptor[]
* If pname:templateType is
* [[VUID-VkDescriptorUpdateTemplateCreateInfoKHR-templateType-00351]] If pname:templateType is
ename:VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR,
pname:pipelineBindPoint must: be a valid elink:VkPipelineBindPoint value
* If pname:templateType is
* [[VUID-VkDescriptorUpdateTemplateCreateInfoKHR-templateType-00352]] If pname:templateType is
ename:VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR,
pname:pipelineLayout must: be a valid sname:VkPipelineLayout handle
* If pname:templateType is
* [[VUID-VkDescriptorUpdateTemplateCreateInfoKHR-templateType-00353]] If pname:templateType is
ename:VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR, pname:set
must: be the unique set number in the pipeline layout that uses a
descriptor set layout that was created with
@ -2113,10 +2120,10 @@ include::../api/structs/VkDescriptorUpdateTemplateEntryKHR.txt[]
.Valid Usage
****
* pname:dstBinding must: be a valid binding in the descriptor set layout
* [[VUID-VkDescriptorUpdateTemplateEntryKHR-dstBinding-00354]] pname:dstBinding must: be a valid binding in the descriptor set layout
implicitly specified when using a descriptor update template to update
descriptors.
* pname:dstArrayElement and pname:descriptorCount must: be less than or
* [[VUID-VkDescriptorUpdateTemplateEntryKHR-dstArrayElement-00355]] pname:dstArrayElement and pname:descriptorCount must: be less than or
equal to the number of array elements in the descriptor set binding
implicitly specified when using a descriptor update template to update
descriptors, and all applicable consecutive bindings, as described by
@ -2142,10 +2149,10 @@ include::../api/protos/vkDestroyDescriptorUpdateTemplateKHR.txt[]
.Valid Usage
****
* If sname:VkAllocationCallbacks were provided when
* [[VUID-vkDestroyDescriptorUpdateTemplateKHR-descriptorSetLayout-00356]] If sname:VkAllocationCallbacks were provided when
pname:descriptorSetLayout was created, a compatible set of callbacks
must: be provided here
* If no sname:VkAllocationCallbacks were provided when
* [[VUID-vkDestroyDescriptorUpdateTemplateKHR-descriptorSetLayout-00357]] If no sname:VkAllocationCallbacks were provided when
pname:descriptorSetLayout was created, pname:pAllocator must: be `NULL`
****
@ -2341,19 +2348,19 @@ descriptor set.
.Valid Usage
****
* Any given element of pname:pDescriptorSets must: have been allocated
* [[VUID-vkCmdBindDescriptorSets-pDescriptorSets-00358]] Any given element of pname:pDescriptorSets must: have been allocated
with a sname:VkDescriptorSetLayout that matches (is the same as, or
identically defined as) the sname:VkDescriptorSetLayout at set _n_ in
pname:layout, where _n_ is the sum of pname:firstSet and the index into
pname:pDescriptorSets
* pname:dynamicOffsetCount must: be equal to the total number of dynamic
* [[VUID-vkCmdBindDescriptorSets-dynamicOffsetCount-00359]] pname:dynamicOffsetCount must: be equal to the total number of dynamic
descriptors in pname:pDescriptorSets
* The sum of pname:firstSet and pname:descriptorSetCount must: be less
* [[VUID-vkCmdBindDescriptorSets-firstSet-00360]] The sum of pname:firstSet and pname:descriptorSetCount must: be less
than or equal to sname:VkPipelineLayoutCreateInfo::pname:setLayoutCount
provided when pname:layout was created
* pname:pipelineBindPoint must: be supported by the pname:commandBuffer's
* [[VUID-vkCmdBindDescriptorSets-pipelineBindPoint-00361]] pname:pipelineBindPoint must: be supported by the pname:commandBuffer's
parent sname:VkCommandPool's queue family
* Any given element of pname:pDynamicOffsets must: satisfy the required
* [[VUID-vkCmdBindDescriptorSets-pDynamicOffsets-00362]] Any given element of pname:pDynamicOffsets must: satisfy the required
alignment for the corresponding descriptor binding's descriptor type
****
@ -2437,12 +2444,12 @@ the pipeline layout.
.Valid Usage
****
* pname:pipelineBindPoint must: be supported by the pname:commandBuffer's
* [[VUID-vkCmdPushDescriptorSetKHR-pipelineBindPoint-00363]] pname:pipelineBindPoint must: be supported by the pname:commandBuffer's
parent sname:VkCommandPool's queue family
* pname:set must: be less than
* [[VUID-vkCmdPushDescriptorSetKHR-set-00364]] pname:set must: be less than
sname:VkPipelineLayoutCreateInfo::pname:setLayoutCount provided when
pname:layout was created
* pname:set must: be the unique set number in the pipeline layout that
* [[VUID-vkCmdPushDescriptorSetKHR-set-00365]] pname:set must: be the unique set number in the pipeline layout that
uses a descriptor set layout that was created with
ename:VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR
****
@ -2479,7 +2486,7 @@ include::../api/protos/vkCmdPushDescriptorSetWithTemplateKHR.txt[]
.Valid Usage
****
* The pipelineBindPoint specified during the creation of the descriptor
* [[VUID-vkCmdPushDescriptorSetWithTemplateKHR-commandBuffer-00366]] The pipelineBindPoint specified during the creation of the descriptor
update template must: be supported by the pname:commandBuffer's parent
sname:VkCommandPool's queue family
****
@ -2588,13 +2595,13 @@ include::../api/protos/vkCmdPushConstants.txt[]
.Valid Usage
****
* pname:stageFlags must: match exactly the shader stages used in
* [[VUID-vkCmdPushConstants-stageFlags-00367]] pname:stageFlags must: match exactly the shader stages used in
pname:layout for the range specified by pname:offset and pname:size
* pname:offset must: be a multiple of `4`
* pname:size must: be a multiple of `4`
* pname:offset must: be less than
* [[VUID-vkCmdPushConstants-offset-00368]] pname:offset must: be a multiple of `4`
* [[VUID-vkCmdPushConstants-size-00369]] pname:size must: be a multiple of `4`
* [[VUID-vkCmdPushConstants-offset-00370]] pname:offset must: be less than
sname:VkPhysicalDeviceLimits::pname:maxPushConstantsSize
* pname:size must: be less than or equal to
* [[VUID-vkCmdPushConstants-size-00371]] pname:size must: be less than or equal to
sname:VkPhysicalDeviceLimits::pname:maxPushConstantsSize minus
pname:offset
****

View File

@ -604,15 +604,15 @@ include::../api/structs/VkDeviceCreateInfo.txt[]
.Valid Usage
****
* The pname:queueFamilyIndex member of any given element of
* [[VUID-VkDeviceCreateInfo-queueFamilyIndex-00372]] The pname:queueFamilyIndex member of any given element of
pname:pQueueCreateInfos must: be unique within pname:pQueueCreateInfos
ifdef::VK_KHR_get_physical_device_properties2[]
* If the pname:pNext chain includes a slink:VkPhysicalDeviceFeatures2KHR
* [[VUID-VkDeviceCreateInfo-pNext-00373]] If the pname:pNext chain includes a slink:VkPhysicalDeviceFeatures2KHR
structure, then pname:pEnabledFeatures must: be `NULL`
endif::VK_KHR_get_physical_device_properties2[]
ifdef::VK_KHR_maintenance1[]
ifdef::VK_AMD_negative_viewport_height[]
* pname:ppEnabledExtensionNames must: not contain both
* [[VUID-VkDeviceCreateInfo-ppEnabledExtensionNames-00374]] pname:ppEnabledExtensionNames must: not contain both
code:VK_KHR_maintenance1 and code:VK_AMD_negative_viewport_height
endif::VK_AMD_negative_viewport_height[]
endif::VK_KHR_maintenance1[]
@ -657,10 +657,10 @@ In particular, the device index of that physical device is zero.
.Valid Usage
****
* Each element of pname:pPhysicalDevices must: be unique
* All elements of pname:pPhysicalDevices must: be in the same device group
* [[VUID-VkDeviceGroupDeviceCreateInfoKHX-pPhysicalDevices-00375]] Each element of pname:pPhysicalDevices must: be unique
* [[VUID-VkDeviceGroupDeviceCreateInfoKHX-pPhysicalDevices-00376]] All elements of pname:pPhysicalDevices must: be in the same device group
as enumerated by flink:vkEnumeratePhysicalDeviceGroupsKHX
* If pname:physicalDeviceCount is not `0`, the pname:physicalDevice
* [[VUID-VkDeviceGroupDeviceCreateInfoKHX-physicalDeviceCount-00377]] If pname:physicalDeviceCount is not `0`, the pname:physicalDevice
parameter of flink:vkCreateDevice must: be an element of
pname:pPhysicalDevices.
****
@ -813,11 +813,11 @@ fname:vkDestroyDevice.
.Valid Usage
****
* All child objects created on pname:device must: have been destroyed
* [[VUID-vkDestroyDevice-device-00378]] All child objects created on pname:device must: have been destroyed
prior to destroying pname:device
* If sname:VkAllocationCallbacks were provided when pname:device was
* [[VUID-vkDestroyDevice-device-00379]] If sname:VkAllocationCallbacks were provided when pname:device was
created, a compatible set of callbacks must: be provided here
* If no sname:VkAllocationCallbacks were provided when pname:device was
* [[VUID-vkDestroyDevice-device-00380]] If no sname:VkAllocationCallbacks were provided when pname:device was
created, pname:pAllocator must: be `NULL`
****
@ -903,14 +903,14 @@ include::../api/structs/VkDeviceQueueCreateInfo.txt[]
.Valid Usage
****
* pname:queueFamilyIndex must: be less than
* [[VUID-VkDeviceQueueCreateInfo-queueFamilyIndex-00381]] pname:queueFamilyIndex must: be less than
pname:pQueueFamilyPropertyCount returned by
fname:vkGetPhysicalDeviceQueueFamilyProperties
* pname:queueCount must: be less than or equal to the pname:queueCount
* [[VUID-VkDeviceQueueCreateInfo-queueCount-00382]] pname:queueCount must: be less than or equal to the pname:queueCount
member of the sname:VkQueueFamilyProperties structure, as returned by
fname:vkGetPhysicalDeviceQueueFamilyProperties in the
pname:pQueueFamilyProperties[pname:queueFamilyIndex]
* Each element of pname:pQueuePriorities must: be between `0.0` and `1.0`
* [[VUID-VkDeviceQueueCreateInfo-pQueuePriorities-00383]] Each element of pname:pQueuePriorities must: be between `0.0` and `1.0`
inclusive
****
@ -932,10 +932,10 @@ include::../api/protos/vkGetDeviceQueue.txt[]
.Valid Usage
****
* pname:queueFamilyIndex must: be one of the queue family indices
* [[VUID-vkGetDeviceQueue-queueFamilyIndex-00384]] pname:queueFamilyIndex must: be one of the queue family indices
specified when pname:device was created, via the
sname:VkDeviceQueueCreateInfo structure
* pname:queueIndex must: be less than the number of queues created for the
* [[VUID-vkGetDeviceQueue-queueIndex-00385]] pname:queueIndex must: be less than the number of queues created for the
specified queue family index when pname:device was created, via the
pname:queueCount member of the sname:VkDeviceQueueCreateInfo structure
****

View File

@ -33,60 +33,60 @@ is assembled.
.Valid Usage
****
* pname:groupCountX must: be less than or equal to
* [[VUID-vkCmdDispatch-groupCountX-00386]] pname:groupCountX must: be less than or equal to
sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[0]
* pname:groupCountY must: be less than or equal to
* [[VUID-vkCmdDispatch-groupCountY-00387]] pname:groupCountY must: be less than or equal to
sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[1]
* pname:groupCountZ must: be less than or equal to
* [[VUID-vkCmdDispatch-groupCountZ-00388]] pname:groupCountZ must: be less than or equal to
sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[2]
* For each set _n_ that is statically used by the sname:VkPipeline
* [[VUID-vkCmdDispatch-None-00389]] For each set _n_ that is statically used by the sname:VkPipeline
currently bound to ename:VK_PIPELINE_BIND_POINT_COMPUTE, a descriptor
set must: have been bound to _n_ at
ename:VK_PIPELINE_BIND_POINT_COMPUTE, with a sname:VkPipelineLayout that
is compatible for set _n_, with the sname:VkPipelineLayout used to
create the current sname:VkPipeline, as described in
<<descriptorsets-compatibility>>
* Descriptors in each bound descriptor set, specified via
* [[VUID-vkCmdDispatch-None-00390]] Descriptors in each bound descriptor set, specified via
fname:vkCmdBindDescriptorSets, must: be valid if they are statically
used by the currently bound sname:VkPipeline object, specified via
fname:vkCmdBindPipeline
* A valid compute pipeline must: be bound to the current command buffer
* [[VUID-vkCmdDispatch-None-00391]] A valid compute pipeline must: be bound to the current command buffer
with ename:VK_PIPELINE_BIND_POINT_COMPUTE
* For each push constant that is statically used by the sname:VkPipeline
* [[VUID-vkCmdDispatch-None-00392]] For each push constant that is statically used by the sname:VkPipeline
currently bound to ename:VK_PIPELINE_BIND_POINT_COMPUTE, a push constant
value must: have been set for ename:VK_PIPELINE_BIND_POINT_COMPUTE, with
a sname:VkPipelineLayout that is compatible for push constants with the
one used to create the current sname:VkPipeline, as described in
<<descriptorsets-compatibility>>
* If any sname:VkSampler object that is accessed from a shader by the
* [[VUID-vkCmdDispatch-None-00393]] If any sname:VkSampler object that is accessed from a shader by the
sname:VkPipeline currently bound to ename:VK_PIPELINE_BIND_POINT_COMPUTE
uses unnormalized coordinates, it must: not be used to sample from any
sname:VkImage with a sname:VkImageView of the type
ename:VK_IMAGE_VIEW_TYPE_3D, ename:VK_IMAGE_VIEW_TYPE_CUBE,
ename:VK_IMAGE_VIEW_TYPE_1D_ARRAY, ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY or
ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY, in any shader stage
* If any sname:VkSampler object that is accessed from a shader by the
* [[VUID-vkCmdDispatch-None-00394]] If any sname:VkSampler object that is accessed from a shader by the
sname:VkPipeline currently bound to ename:VK_PIPELINE_BIND_POINT_COMPUTE
uses unnormalized coordinates, it must: not be used with any of the
SPIR-V `OpImageSample*` or `OpImageSparseSample*` instructions with
code:ImplicitLod, code:Dref or code:Proj in their name, in any shader
stage
* If any sname:VkSampler object that is accessed from a shader by the
* [[VUID-vkCmdDispatch-None-00395]] If any sname:VkSampler object that is accessed from a shader by the
sname:VkPipeline currently bound to ename:VK_PIPELINE_BIND_POINT_COMPUTE
uses unnormalized coordinates, it must: not be used with any of the
SPIR-V `OpImageSample*` or `OpImageSparseSample*` instructions that
includes a LOD bias or any offset values, in any shader stage
* If the <<features-features-robustBufferAccess,robust buffer access>>
* [[VUID-vkCmdDispatch-None-00396]] If the <<features-features-robustBufferAccess,robust buffer access>>
feature is not enabled, and any shader stage in the sname:VkPipeline
object currently bound to ename:VK_PIPELINE_BIND_POINT_COMPUTE accesses
a uniform buffer, it must: not access values outside of the range of
that buffer specified in the currently bound descriptor set
* If the <<features-features-robustBufferAccess,robust buffer access>>
* [[VUID-vkCmdDispatch-None-00397]] If the <<features-features-robustBufferAccess,robust buffer access>>
feature is not enabled, and any shader stage in the sname:VkPipeline
object currently bound to ename:VK_PIPELINE_BIND_POINT_COMPUTE accesses
a storage buffer, it must: not access values outside of the range of
that buffer specified in the currently bound descriptor set
* Any sname:VkImageView being sampled with ename:VK_FILTER_LINEAR as a
* [[VUID-vkCmdDispatch-linearTilingFeatures-00398]] Any sname:VkImageView being sampled with ename:VK_FILTER_LINEAR as a
result of this command must: be of a format which supports linear
filtering, as specified by the
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in
@ -95,7 +95,7 @@ is assembled.
optimally tiled image) returned by
fname:vkGetPhysicalDeviceFormatProperties
ifdef::VK_IMG_filter_cubic[]
* Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_IMG as a
* [[VUID-vkCmdDispatch-linearTilingFeatures-00399]] Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_IMG as a
result of this command must: be of a format which supports cubic
filtering, as specified by the
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG flag in
@ -103,7 +103,7 @@ ifdef::VK_IMG_filter_cubic[]
image) or sname:VkFormatProperties::pname:optimalTilingFeatures(for an
optimally tiled image) returned by
fname:vkGetPhysicalDeviceFormatProperties
* Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_IMG as a
* [[VUID-vkCmdDispatch-None-00400]] Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_IMG as a
result of this command must: not have a elink:VkImageViewType of
ename:VK_IMAGE_VIEW_TYPE_3D, ename:VK_IMAGE_VIEW_TYPE_CUBE, or
ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY
@ -132,61 +132,61 @@ at pname:offset.
.Valid Usage
****
* If pname:buffer is non-sparse then it must: be bound completely and
* [[VUID-vkCmdDispatchIndirect-buffer-00401]] If pname:buffer is non-sparse then it must: be bound completely and
contiguously to a single sname:VkDeviceMemory object
* For each set _n_ that is statically used by the sname:VkPipeline
* [[VUID-vkCmdDispatchIndirect-None-00402]] For each set _n_ that is statically used by the sname:VkPipeline
currently bound to ename:VK_PIPELINE_BIND_POINT_COMPUTE, a descriptor
set must: have been bound to _n_ at
ename:VK_PIPELINE_BIND_POINT_COMPUTE, with a sname:VkPipelineLayout that
is compatible for set _n_, with the sname:VkPipelineLayout used to
create the current sname:VkPipeline, as described in
<<descriptorsets-compatibility>>
* Descriptors in each bound descriptor set, specified via
* [[VUID-vkCmdDispatchIndirect-None-00403]] Descriptors in each bound descriptor set, specified via
fname:vkCmdBindDescriptorSets, must: be valid if they are statically
used by the currently bound sname:VkPipeline object, specified via
fname:vkCmdBindPipeline
* A valid compute pipeline must: be bound to the current command buffer
* [[VUID-vkCmdDispatchIndirect-None-00404]] A valid compute pipeline must: be bound to the current command buffer
with ename:VK_PIPELINE_BIND_POINT_COMPUTE
* pname:buffer must: have been created with the
* [[VUID-vkCmdDispatchIndirect-buffer-00405]] pname:buffer must: have been created with the
ename:VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT bit set
* pname:offset must: be a multiple of `4`
* The sum of pname:offset and the size of sname:VkDispatchIndirectCommand
* [[VUID-vkCmdDispatchIndirect-offset-00406]] pname:offset must: be a multiple of `4`
* [[VUID-vkCmdDispatchIndirect-offset-00407]] The sum of pname:offset and the size of sname:VkDispatchIndirectCommand
must: be less than or equal to the size of pname:buffer
* For each push constant that is statically used by the sname:VkPipeline
* [[VUID-vkCmdDispatchIndirect-None-00408]] For each push constant that is statically used by the sname:VkPipeline
currently bound to ename:VK_PIPELINE_BIND_POINT_COMPUTE, a push constant
value must: have been set for ename:VK_PIPELINE_BIND_POINT_COMPUTE, with
a sname:VkPipelineLayout that is compatible for push constants with the
one used to create the current sname:VkPipeline, as described in
<<descriptorsets-compatibility>>
* If any sname:VkSampler object that is accessed from a shader by the
* [[VUID-vkCmdDispatchIndirect-None-00409]] If any sname:VkSampler object that is accessed from a shader by the
sname:VkPipeline currently bound to ename:VK_PIPELINE_BIND_POINT_COMPUTE
uses unnormalized coordinates, it must: not be used to sample from any
sname:VkImage with a sname:VkImageView of the type
ename:VK_IMAGE_VIEW_TYPE_3D, ename:VK_IMAGE_VIEW_TYPE_CUBE,
ename:VK_IMAGE_VIEW_TYPE_1D_ARRAY, ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY or
ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY, in any shader stage
* If any sname:VkSampler object that is accessed from a shader by the
* [[VUID-vkCmdDispatchIndirect-None-00410]] If any sname:VkSampler object that is accessed from a shader by the
sname:VkPipeline currently bound to ename:VK_PIPELINE_BIND_POINT_COMPUTE
uses unnormalized coordinates, it must: not be used with any of the
SPIR-V `OpImageSample*` or `OpImageSparseSample*` instructions with
code:ImplicitLod, code:Dref or code:Proj in their name, in any shader
stage
* If any sname:VkSampler object that is accessed from a shader by the
* [[VUID-vkCmdDispatchIndirect-None-00411]] If any sname:VkSampler object that is accessed from a shader by the
sname:VkPipeline currently bound to ename:VK_PIPELINE_BIND_POINT_COMPUTE
uses unnormalized coordinates, it must: not be used with any of the
SPIR-V `OpImageSample*` or `OpImageSparseSample*` instructions that
includes a LOD bias or any offset values, in any shader stage
* If the <<features-features-robustBufferAccess,robust buffer access>>
* [[VUID-vkCmdDispatchIndirect-None-00412]] If the <<features-features-robustBufferAccess,robust buffer access>>
feature is not enabled, and any shader stage in the sname:VkPipeline
object currently bound to ename:VK_PIPELINE_BIND_POINT_COMPUTE accesses
a uniform buffer, it must: not access values outside of the range of
that buffer specified in the currently bound descriptor set
* If the <<features-features-robustBufferAccess,robust buffer access>>
* [[VUID-vkCmdDispatchIndirect-None-00413]] If the <<features-features-robustBufferAccess,robust buffer access>>
feature is not enabled, and any shader stage in the sname:VkPipeline
object currently bound to ename:VK_PIPELINE_BIND_POINT_COMPUTE accesses
a storage buffer, it must: not access values outside of the range of
that buffer specified in the currently bound descriptor set
* Any sname:VkImageView being sampled with ename:VK_FILTER_LINEAR as a
* [[VUID-vkCmdDispatchIndirect-linearTilingFeatures-00414]] Any sname:VkImageView being sampled with ename:VK_FILTER_LINEAR as a
result of this command must: be of a format which supports linear
filtering, as specified by the
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in
@ -195,7 +195,7 @@ at pname:offset.
optimally tiled image) returned by
fname:vkGetPhysicalDeviceFormatProperties
ifdef::VK_IMG_filter_cubic[]
* Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_IMG as a
* [[VUID-vkCmdDispatchIndirect-linearTilingFeatures-00415]] Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_IMG as a
result of this command must: be of a format which supports cubic
filtering, as specified by the
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG flag in
@ -203,7 +203,7 @@ ifdef::VK_IMG_filter_cubic[]
image) or sname:VkFormatProperties::pname:optimalTilingFeatures(for an
optimally tiled image) returned by
fname:vkGetPhysicalDeviceFormatProperties
* Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_IMG as a
* [[VUID-vkCmdDispatchIndirect-None-00416]] Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_IMG as a
result of this command must: not have a elink:VkImageViewType of
ename:VK_IMAGE_VIEW_TYPE_3D, ename:VK_IMAGE_VIEW_TYPE_CUBE, or
ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY
@ -230,11 +230,11 @@ corresponding parameters of flink:vkCmdDispatch.
.Valid Usage
****
* pname:x must: be less than or equal to
* [[VUID-VkDispatchIndirectCommand-x-00417]] pname:x must: be less than or equal to
sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[0]
* pname:y must: be less than or equal to
* [[VUID-VkDispatchIndirectCommand-y-00418]] pname:y must: be less than or equal to
sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[1]
* pname:z must: be less than or equal to
* [[VUID-VkDispatchIndirectCommand-z-00419]] pname:z must: be less than or equal to
sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[2]
****
@ -275,23 +275,23 @@ vkCmdDispatchBaseKHX(0,0,0,groupCountX,groupCountY,groupCountZ).
.Valid Usage
****
* All valid usage rules from flink:vkCmdDispatch apply
* pname:baseGroupX must: be less than
* [[VUID-vkCmdDispatchBaseKHX-None-00420]] All valid usage rules from flink:vkCmdDispatch apply
* [[VUID-vkCmdDispatchBaseKHX-baseGroupX-00421]] pname:baseGroupX must: be less than
sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[0]
* pname:baseGroupX must: be less than
* [[VUID-vkCmdDispatchBaseKHX-baseGroupX-00422]] pname:baseGroupX must: be less than
sname:VkPhysicaYDeviceLimits::pname:maxComputeWorkGroupCount[1]
* pname:baseGroupZ must: be less than
* [[VUID-vkCmdDispatchBaseKHX-baseGroupZ-00423]] pname:baseGroupZ must: be less than
sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[2]
* pname:groupCountX must: be less than or equal to
* [[VUID-vkCmdDispatchBaseKHX-groupCountX-00424]] pname:groupCountX must: be less than or equal to
sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[0] minus
pname:baseGroupX
* pname:groupCountY must: be less than or equal to
* [[VUID-vkCmdDispatchBaseKHX-groupCountY-00425]] pname:groupCountY must: be less than or equal to
sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[1] minus
pname:baseGroupY
* pname:groupCountZ must: be less than or equal to
* [[VUID-vkCmdDispatchBaseKHX-groupCountZ-00426]] pname:groupCountZ must: be less than or equal to
sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[2] minus
pname:baseGroupZ
* If any of pname:baseGroupX, pname:baseGroupY, or pname:baseGroupZ are
* [[VUID-vkCmdDispatchBaseKHX-baseGroupX-00427]] If any of pname:baseGroupX, pname:baseGroupY, or pname:baseGroupZ are
not zero, then the currently bound compute pipeline must: have been
created with the ename:VK_PIPELINE_CREATE_DISPATCH_BASE_KHX flag.
****

View File

@ -45,20 +45,20 @@ pname:vertexOffset value to the index value.
.Valid Usage
****
* If pname:topology is ename:VK_PRIMITIVE_TOPOLOGY_POINT_LIST,
* [[VUID-VkPipelineInputAssemblyStateCreateInfo-topology-00428]] If pname:topology is ename:VK_PRIMITIVE_TOPOLOGY_POINT_LIST,
ename:VK_PRIMITIVE_TOPOLOGY_LINE_LIST,
ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST,
ename:VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY,
ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY or
ename:VK_PRIMITIVE_TOPOLOGY_PATCH_LIST, pname:primitiveRestartEnable
must: be ename:VK_FALSE
* If the <<features-features-geometryShader,geometry shaders>> feature is
* [[VUID-VkPipelineInputAssemblyStateCreateInfo-topology-00429]] If the <<features-features-geometryShader,geometry shaders>> feature is
not enabled, pname:topology must: not be any of
ename:VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY,
ename:VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY,
ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY or
ename:VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY
* If the <<features-features-tessellationShader,tessellation shaders>>
* [[VUID-VkPipelineInputAssemblyStateCreateInfo-topology-00430]] If the <<features-features-tessellationShader,tessellation shaders>>
feature is not enabled, pname:topology must: not be
ename:VK_PRIMITIVE_TOPOLOGY_PATCH_LIST
****
@ -458,13 +458,13 @@ include::../api/enums/VkIndexType.txt[]
.Valid Usage
****
* pname:offset must: be less than the size of pname:buffer
* The sum of pname:offset and the address of the range of
* [[VUID-vkCmdBindIndexBuffer-offset-00431]] pname:offset must: be less than the size of pname:buffer
* [[VUID-vkCmdBindIndexBuffer-offset-00432]] The sum of pname:offset and the address of the range of
sname:VkDeviceMemory object that is backing pname:buffer, must: be a
multiple of the type indicated by pname:indexType
* pname:buffer must: have been created with the
* [[VUID-vkCmdBindIndexBuffer-buffer-00433]] pname:buffer must: have been created with the
ename:VK_BUFFER_USAGE_INDEX_BUFFER_BIT flag
* If pname:buffer is non-sparse then it must: be bound completely and
* [[VUID-vkCmdBindIndexBuffer-buffer-00434]] If pname:buffer is non-sparse then it must: be bound completely and
contiguously to a single sname:VkDeviceMemory object
****
@ -502,47 +502,47 @@ The assembled primitives execute the currently bound graphics pipeline.
.Valid Usage
****
* The current render pass must: be <<renderpass-compatibility,compatible>>
* [[VUID-vkCmdDraw-renderPass-00435]] The current render pass must: be <<renderpass-compatibility,compatible>>
with the pname:renderPass member of the
sname:VkGraphicsPipelineCreateInfo structure specified when creating the
sname:VkPipeline currently bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS.
* The subpass index of the current render pass must: be equal to the
* [[VUID-vkCmdDraw-subpass-00436]] The subpass index of the current render pass must: be equal to the
pname:subpass member of the sname:VkGraphicsPipelineCreateInfo structure
specified when creating the sname:VkPipeline currently bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS.
* For each set _n_ that is statically used by the sname:VkPipeline
* [[VUID-vkCmdDraw-None-00437]] For each set _n_ that is statically used by the sname:VkPipeline
currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS, a descriptor
set must: have been bound to _n_ at
ename:VK_PIPELINE_BIND_POINT_GRAPHICS, with a sname:VkPipelineLayout
that is compatible for set _n_, with the sname:VkPipelineLayout used to
create the current sname:VkPipeline, as described in
<<descriptorsets-compatibility>>
* For each push constant that is statically used by the sname:VkPipeline
* [[VUID-vkCmdDraw-None-00438]] For each push constant that is statically used by the sname:VkPipeline
currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS, a push
constant value must: have been set for
ename:VK_PIPELINE_BIND_POINT_GRAPHICS, with a sname:VkPipelineLayout
that is compatible for push constants, with the sname:VkPipelineLayout
used to create the current sname:VkPipeline, as described in
<<descriptorsets-compatibility>>
* Descriptors in each bound descriptor set, specified via
* [[VUID-vkCmdDraw-None-00439]] Descriptors in each bound descriptor set, specified via
fname:vkCmdBindDescriptorSets, must: be valid if they are statically
used by the currently bound sname:VkPipeline object, specified via
fname:vkCmdBindPipeline
* All vertex input bindings accessed via vertex input variables declared
* [[VUID-vkCmdDraw-None-00440]] All vertex input bindings accessed via vertex input variables declared
in the vertex shader entry point's interface must: have valid buffers
bound
* For a given vertex buffer binding, any attribute data fetched must: be
* [[VUID-vkCmdDraw-None-00441]] For a given vertex buffer binding, any attribute data fetched must: be
entirely contained within the corresponding vertex buffer binding, as
described in <<fxvertex-input>>
* A valid graphics pipeline must: be bound to the current command buffer
* [[VUID-vkCmdDraw-None-00442]] A valid graphics pipeline must: be bound to the current command buffer
with ename:VK_PIPELINE_BIND_POINT_GRAPHICS
* If the sname:VkPipeline object currently bound to
* [[VUID-vkCmdDraw-None-00443]] If the sname:VkPipeline object currently bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS requires any dynamic state, that
state must: have been set on the current command buffer
* Every input attachment used by the current subpass must: be bound to the
* [[VUID-vkCmdDraw-None-00444]] Every input attachment used by the current subpass must: be bound to the
pipeline via a descriptor set
* If any sname:VkSampler object that is accessed from a shader by the
* [[VUID-vkCmdDraw-None-00445]] If any sname:VkSampler object that is accessed from a shader by the
sname:VkPipeline currently bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses unnormalized coordinates, it
must: not be used to sample from any sname:VkImage with a
@ -550,29 +550,29 @@ The assembled primitives execute the currently bound graphics pipeline.
ename:VK_IMAGE_VIEW_TYPE_CUBE, ename:VK_IMAGE_VIEW_TYPE_1D_ARRAY,
ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY or
ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY, in any shader stage
* If any sname:VkSampler object that is accessed from a shader by the
* [[VUID-vkCmdDraw-None-00446]] If any sname:VkSampler object that is accessed from a shader by the
sname:VkPipeline currently bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses unnormalized coordinates, it
must: not be used with any of the SPIR-V `OpImageSample*` or
`OpImageSparseSample*` instructions with code:ImplicitLod, code:Dref or
code:Proj in their name, in any shader stage
* If any sname:VkSampler object that is accessed from a shader by the
* [[VUID-vkCmdDraw-None-00447]] If any sname:VkSampler object that is accessed from a shader by the
sname:VkPipeline currently bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses unnormalized coordinates, it
must: not be used with any of the SPIR-V `OpImageSample*` or
`OpImageSparseSample*` instructions that includes a LOD bias or any
offset values, in any shader stage
* If the <<features-features-robustBufferAccess,robust buffer access>>
* [[VUID-vkCmdDraw-None-00448]] If the <<features-features-robustBufferAccess,robust buffer access>>
feature is not enabled, and any shader stage in the sname:VkPipeline
object currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS accesses
a uniform buffer, it must: not access values outside of the range of
that buffer specified in the currently bound descriptor set
* If the <<features-features-robustBufferAccess,robust buffer access>>
* [[VUID-vkCmdDraw-None-00449]] If the <<features-features-robustBufferAccess,robust buffer access>>
feature is not enabled, and any shader stage in the sname:VkPipeline
object currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS accesses
a storage buffer, it must: not access values outside of the range of
that buffer specified in the currently bound descriptor set
* Any sname:VkImageView being sampled with ename:VK_FILTER_LINEAR as a
* [[VUID-vkCmdDraw-linearTilingFeatures-00450]] Any sname:VkImageView being sampled with ename:VK_FILTER_LINEAR as a
result of this command must: be of a format which supports linear
filtering, as specified by the
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in
@ -581,7 +581,7 @@ The assembled primitives execute the currently bound graphics pipeline.
optimally tiled image) returned by
fname:vkGetPhysicalDeviceFormatProperties
ifdef::VK_IMG_filter_cubic[]
* Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_IMG as a
* [[VUID-vkCmdDraw-linearTilingFeatures-00451]] Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_IMG as a
result of this command must: be of a format which supports cubic
filtering, as specified by the
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG flag in
@ -589,13 +589,13 @@ ifdef::VK_IMG_filter_cubic[]
image) or sname:VkFormatProperties::pname:optimalTilingFeatures(for an
optimally tiled image) returned by
fname:vkGetPhysicalDeviceFormatProperties
* Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_IMG as a
* [[VUID-vkCmdDraw-None-00452]] Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_IMG as a
result of this command must: not have a elink:VkImageViewType of
ename:VK_IMAGE_VIEW_TYPE_3D, ename:VK_IMAGE_VIEW_TYPE_CUBE, or
ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY
endif::VK_IMG_filter_cubic[]
ifdef::VK_KHX_multiview[]
* If the draw is recorded in a render pass instance with multiview
* [[VUID-vkCmdDraw-maxMultiviewInstanceIndex-00453]] If the draw is recorded in a render pass instance with multiview
enabled, the maximum instance index must: be less than or equal to
slink:VkPhysicalDeviceMultiviewPropertiesKHX::pname:maxMultiviewInstanceIndex.
endif::VK_KHX_multiview[]
@ -643,52 +643,52 @@ The assembled primitives execute the currently bound graphics pipeline.
.Valid Usage
****
* The current render pass must: be <<renderpass-compatibility,compatible>>
* [[VUID-vkCmdDrawIndexed-renderPass-00454]] The current render pass must: be <<renderpass-compatibility,compatible>>
with the pname:renderPass member of the
sname:VkGraphicsPipelineCreateInfo structure specified when creating the
sname:VkPipeline currently bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS.
* The subpass index of the current render pass must: be equal to the
* [[VUID-vkCmdDrawIndexed-subpass-00455]] The subpass index of the current render pass must: be equal to the
pname:subpass member of the sname:VkGraphicsPipelineCreateInfo structure
specified when creating the sname:VkPipeline currently bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS.
* For each set _n_ that is statically used by the sname:VkPipeline
* [[VUID-vkCmdDrawIndexed-None-00456]] For each set _n_ that is statically used by the sname:VkPipeline
currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS, a descriptor
set must: have been bound to _n_ at
ename:VK_PIPELINE_BIND_POINT_GRAPHICS, with a sname:VkPipelineLayout
that is compatible for set _n_, with the sname:VkPipelineLayout used to
create the current sname:VkPipeline, as described in
<<descriptorsets-compatibility>>
* For each push constant that is statically used by the sname:VkPipeline
* [[VUID-vkCmdDrawIndexed-None-00457]] For each push constant that is statically used by the sname:VkPipeline
currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS, a push
constant value must: have been set for
ename:VK_PIPELINE_BIND_POINT_GRAPHICS, with a sname:VkPipelineLayout
that is compatible for push constants, with the sname:VkPipelineLayout
used to create the current sname:VkPipeline, as described in
<<descriptorsets-compatibility>>
* Descriptors in each bound descriptor set, specified via
* [[VUID-vkCmdDrawIndexed-None-00458]] Descriptors in each bound descriptor set, specified via
fname:vkCmdBindDescriptorSets, must: be valid if they are statically
used by the currently bound sname:VkPipeline object, specified via
fname:vkCmdBindPipeline
* All vertex input bindings accessed via vertex input variables declared
* [[VUID-vkCmdDrawIndexed-None-00459]] All vertex input bindings accessed via vertex input variables declared
in the vertex shader entry point's interface must: have valid buffers
bound
* For a given vertex buffer binding, any attribute data fetched must: be
* [[VUID-vkCmdDrawIndexed-None-00460]] For a given vertex buffer binding, any attribute data fetched must: be
entirely contained within the corresponding vertex buffer binding, as
described in <<fxvertex-input>>
* A valid graphics pipeline must: be bound to the current command buffer
* [[VUID-vkCmdDrawIndexed-None-00461]] A valid graphics pipeline must: be bound to the current command buffer
with ename:VK_PIPELINE_BIND_POINT_GRAPHICS
* If the sname:VkPipeline object currently bound to
* [[VUID-vkCmdDrawIndexed-None-00462]] If the sname:VkPipeline object currently bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS requires any dynamic state, that
state must: have been set on the current command buffer
* (pname:indexSize * (pname:firstIndex + pname:indexCount) + pname:offset)
* [[VUID-vkCmdDrawIndexed-indexSize-00463]] (pname:indexSize * (pname:firstIndex + pname:indexCount) + pname:offset)
must: be less than or equal to the size of the currently bound index
buffer, with indexSize being based on the type specified by
pname:indexType, where the index buffer, pname:indexType, and
pname:offset are specified via fname:vkCmdBindIndexBuffer
* Every input attachment used by the current subpass must: be bound to the
* [[VUID-vkCmdDrawIndexed-None-00464]] Every input attachment used by the current subpass must: be bound to the
pipeline via a descriptor set
* If any sname:VkSampler object that is accessed from a shader by the
* [[VUID-vkCmdDrawIndexed-None-00465]] If any sname:VkSampler object that is accessed from a shader by the
sname:VkPipeline currently bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses unnormalized coordinates, it
must: not be used to sample from any sname:VkImage with a
@ -696,29 +696,29 @@ The assembled primitives execute the currently bound graphics pipeline.
ename:VK_IMAGE_VIEW_TYPE_CUBE, ename:VK_IMAGE_VIEW_TYPE_1D_ARRAY,
ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY or
ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY, in any shader stage
* If any sname:VkSampler object that is accessed from a shader by the
* [[VUID-vkCmdDrawIndexed-None-00466]] If any sname:VkSampler object that is accessed from a shader by the
sname:VkPipeline currently bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses unnormalized coordinates, it
must: not be used with any of the SPIR-V `OpImageSample*` or
`OpImageSparseSample*` instructions with code:ImplicitLod, code:Dref or
code:Proj in their name, in any shader stage
* If any sname:VkSampler object that is accessed from a shader by the
* [[VUID-vkCmdDrawIndexed-None-00467]] If any sname:VkSampler object that is accessed from a shader by the
sname:VkPipeline currently bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses unnormalized coordinates, it
must: not be used with any of the SPIR-V `OpImageSample*` or
`OpImageSparseSample*` instructions that includes a LOD bias or any
offset values, in any shader stage
* If the <<features-features-robustBufferAccess,robust buffer access>>
* [[VUID-vkCmdDrawIndexed-None-00468]] If the <<features-features-robustBufferAccess,robust buffer access>>
feature is not enabled, and any shader stage in the sname:VkPipeline
object currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS accesses
a uniform buffer, it must: not access values outside of the range of
that buffer specified in the currently bound descriptor set
* If the <<features-features-robustBufferAccess,robust buffer access>>
* [[VUID-vkCmdDrawIndexed-None-00469]] If the <<features-features-robustBufferAccess,robust buffer access>>
feature is not enabled, and any shader stage in the sname:VkPipeline
object currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS accesses
a storage buffer, it must: not access values outside of the range of
that buffer specified in the currently bound descriptor set
* Any sname:VkImageView being sampled with ename:VK_FILTER_LINEAR as a
* [[VUID-vkCmdDrawIndexed-linearTilingFeatures-00470]] Any sname:VkImageView being sampled with ename:VK_FILTER_LINEAR as a
result of this command must: be of a format which supports linear
filtering, as specified by the
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in
@ -727,7 +727,7 @@ The assembled primitives execute the currently bound graphics pipeline.
optimally tiled image) returned by
fname:vkGetPhysicalDeviceFormatProperties
ifdef::VK_IMG_filter_cubic[]
* Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_IMG as a
* [[VUID-vkCmdDrawIndexed-linearTilingFeatures-00471]] Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_IMG as a
result of this command must: be of a format which supports cubic
filtering, as specified by the
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG flag in
@ -735,13 +735,13 @@ ifdef::VK_IMG_filter_cubic[]
image) or sname:VkFormatProperties::pname:optimalTilingFeatures(for an
optimally tiled image) returned by
fname:vkGetPhysicalDeviceFormatProperties
* Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_IMG as a
* [[VUID-vkCmdDrawIndexed-None-00472]] Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_IMG as a
result of this command must: not have a elink:VkImageViewType of
ename:VK_IMAGE_VIEW_TYPE_3D, ename:VK_IMAGE_VIEW_TYPE_CUBE, or
ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY
endif::VK_IMG_filter_cubic[]
ifdef::VK_KHX_multiview[]
* If the draw is recorded in a render pass instance with multiview
* [[VUID-vkCmdDrawIndexed-maxMultiviewInstanceIndex-00473]] If the draw is recorded in a render pass instance with multiview
enabled, the maximum instance index must: be less than or equal to
slink:VkPhysicalDeviceMultiviewPropertiesKHX::pname:maxMultiviewInstanceIndex.
endif::VK_KHX_multiview[]
@ -775,66 +775,66 @@ If pname:drawCount is less than or equal to one, pname:stride is ignored.
.Valid Usage
****
* If pname:buffer is non-sparse then it must: be bound completely and
* [[VUID-vkCmdDrawIndirect-buffer-00474]] If pname:buffer is non-sparse then it must: be bound completely and
contiguously to a single sname:VkDeviceMemory object
* pname:offset must: be a multiple of `4`
* If pname:drawCount is greater than `1`, pname:stride must: be a multiple
* [[VUID-vkCmdDrawIndirect-offset-00475]] pname:offset must: be a multiple of `4`
* [[VUID-vkCmdDrawIndirect-drawCount-00476]] If pname:drawCount is greater than `1`, pname:stride must: be a multiple
of `4` and must: be greater than or equal to
sizeof(sname:VkDrawIndirectCommand)
* If the <<features-features-multiDrawIndirect,multi-draw indirect>>
* [[VUID-vkCmdDrawIndirect-drawCount-00477]] If the <<features-features-multiDrawIndirect,multi-draw indirect>>
feature is not enabled, pname:drawCount must: be `0` or `1`
* If the
* [[VUID-vkCmdDrawIndirect-firstInstance-00478]] If the
<<features-features-drawIndirectFirstInstance,drawIndirectFirstInstance>>
feature is not enabled, all the pname:firstInstance members of the
sname:VkDrawIndirectCommand structures accessed by this command must: be
code:0
* The current render pass must: be <<renderpass-compatibility,compatible>>
* [[VUID-vkCmdDrawIndirect-renderPass-00479]] The current render pass must: be <<renderpass-compatibility,compatible>>
with the pname:renderPass member of the
sname:VkGraphicsPipelineCreateInfo structure specified when creating the
sname:VkPipeline currently bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS.
* The subpass index of the current render pass must: be equal to the
* [[VUID-vkCmdDrawIndirect-subpass-00480]] The subpass index of the current render pass must: be equal to the
pname:subpass member of the sname:VkGraphicsPipelineCreateInfo structure
specified when creating the sname:VkPipeline currently bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS.
* For each set _n_ that is statically used by the sname:VkPipeline
* [[VUID-vkCmdDrawIndirect-None-00481]] For each set _n_ that is statically used by the sname:VkPipeline
currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS, a descriptor
set must: have been bound to _n_ at
ename:VK_PIPELINE_BIND_POINT_GRAPHICS, with a sname:VkPipelineLayout
that is compatible for set _n_, with the sname:VkPipelineLayout used to
create the current sname:VkPipeline, as described in
<<descriptorsets-compatibility>>
* For each push constant that is statically used by the sname:VkPipeline
* [[VUID-vkCmdDrawIndirect-None-00482]] For each push constant that is statically used by the sname:VkPipeline
currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS, a push
constant value must: have been set for
ename:VK_PIPELINE_BIND_POINT_GRAPHICS, with a sname:VkPipelineLayout
that is compatible for push constants, with the sname:VkPipelineLayout
used to create the current sname:VkPipeline, as described in
<<descriptorsets-compatibility>>
* Descriptors in each bound descriptor set, specified via
* [[VUID-vkCmdDrawIndirect-None-00483]] Descriptors in each bound descriptor set, specified via
fname:vkCmdBindDescriptorSets, must: be valid if they are statically
used by the currently bound sname:VkPipeline object, specified via
fname:vkCmdBindPipeline
* All vertex input bindings accessed via vertex input variables declared
* [[VUID-vkCmdDrawIndirect-None-00484]] All vertex input bindings accessed via vertex input variables declared
in the vertex shader entry point's interface must: have valid buffers
bound
* A valid graphics pipeline must: be bound to the current command buffer
* [[VUID-vkCmdDrawIndirect-None-00485]] A valid graphics pipeline must: be bound to the current command buffer
with ename:VK_PIPELINE_BIND_POINT_GRAPHICS
* If the sname:VkPipeline object currently bound to
* [[VUID-vkCmdDrawIndirect-None-00486]] If the sname:VkPipeline object currently bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS requires any dynamic state, that
state must: have been set on the current command buffer
* If pname:drawCount is equal to `1`, [eq]#(pname:offset {plus}
* [[VUID-vkCmdDrawIndirect-drawCount-00487]] If pname:drawCount is equal to `1`, [eq]#(pname:offset {plus}
sizeof(slink:VkDrawIndirectCommand))# must: be less than or equal to the
size of pname:buffer
* If pname:drawCount is greater than `1`, [eq]#(pname:stride {times}
* [[VUID-vkCmdDrawIndirect-drawCount-00488]] If pname:drawCount is greater than `1`, [eq]#(pname:stride {times}
(pname:drawCount - 1) + pname:offset {plus}
sizeof(slink:VkDrawIndirectCommand))# must: be less than or equal to the
size of pname:buffer
* pname:drawCount must: be less than or equal to
* [[VUID-vkCmdDrawIndirect-drawCount-00489]] pname:drawCount must: be less than or equal to
sname:VkPhysicalDeviceLimits::pname:maxDrawIndirectCount
* Every input attachment used by the current subpass must: be bound to the
* [[VUID-vkCmdDrawIndirect-None-00490]] Every input attachment used by the current subpass must: be bound to the
pipeline via a descriptor set
* If any sname:VkSampler object that is accessed from a shader by the
* [[VUID-vkCmdDrawIndirect-None-00491]] If any sname:VkSampler object that is accessed from a shader by the
sname:VkPipeline currently bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses unnormalized coordinates, it
must: not be used to sample from any sname:VkImage with a
@ -842,29 +842,29 @@ If pname:drawCount is less than or equal to one, pname:stride is ignored.
ename:VK_IMAGE_VIEW_TYPE_CUBE, ename:VK_IMAGE_VIEW_TYPE_1D_ARRAY,
ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY or
ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY, in any shader stage
* If any sname:VkSampler object that is accessed from a shader by the
* [[VUID-vkCmdDrawIndirect-None-00492]] If any sname:VkSampler object that is accessed from a shader by the
sname:VkPipeline currently bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses unnormalized coordinates, it
must: not be used with any of the SPIR-V `OpImageSample*` or
`OpImageSparseSample*` instructions with code:ImplicitLod, code:Dref or
code:Proj in their name, in any shader stage
* If any sname:VkSampler object that is accessed from a shader by the
* [[VUID-vkCmdDrawIndirect-None-00493]] If any sname:VkSampler object that is accessed from a shader by the
sname:VkPipeline currently bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses unnormalized coordinates, it
must: not be used with any of the SPIR-V `OpImageSample*` or
`OpImageSparseSample*` instructions that includes a LOD bias or any
offset values, in any shader stage
* If the <<features-features-robustBufferAccess,robust buffer access>>
* [[VUID-vkCmdDrawIndirect-None-00494]] If the <<features-features-robustBufferAccess,robust buffer access>>
feature is not enabled, and any shader stage in the sname:VkPipeline
object currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS accesses
a uniform buffer, it must: not access values outside of the range of
that buffer specified in the currently bound descriptor set
* If the <<features-features-robustBufferAccess,robust buffer access>>
* [[VUID-vkCmdDrawIndirect-None-00495]] If the <<features-features-robustBufferAccess,robust buffer access>>
feature is not enabled, and any shader stage in the sname:VkPipeline
object currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS accesses
a storage buffer, it must: not access values outside of the range of
that buffer specified in the currently bound descriptor set
* Any sname:VkImageView being sampled with ename:VK_FILTER_LINEAR as a
* [[VUID-vkCmdDrawIndirect-linearTilingFeatures-00496]] Any sname:VkImageView being sampled with ename:VK_FILTER_LINEAR as a
result of this command must: be of a format which supports linear
filtering, as specified by the
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in
@ -873,7 +873,7 @@ If pname:drawCount is less than or equal to one, pname:stride is ignored.
optimally tiled image) returned by
fname:vkGetPhysicalDeviceFormatProperties
ifdef::VK_IMG_filter_cubic[]
* Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_IMG as a
* [[VUID-vkCmdDrawIndirect-linearTilingFeatures-00497]] Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_IMG as a
result of this command must: be of a format which supports cubic
filtering, as specified by the
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG flag in
@ -881,13 +881,13 @@ ifdef::VK_IMG_filter_cubic[]
image) or sname:VkFormatProperties::pname:optimalTilingFeatures(for an
optimally tiled image) returned by
fname:vkGetPhysicalDeviceFormatProperties
* Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_IMG as a
* [[VUID-vkCmdDrawIndirect-None-00498]] Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_IMG as a
result of this command must: not have a elink:VkImageViewType of
ename:VK_IMAGE_VIEW_TYPE_3D, ename:VK_IMAGE_VIEW_TYPE_CUBE, or
ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY
endif::VK_IMG_filter_cubic[]
ifdef::VK_KHX_multiview[]
* If the draw is recorded in a render pass instance with multiview
* [[VUID-vkCmdDrawIndirect-maxMultiviewInstanceIndex-00499]] If the draw is recorded in a render pass instance with multiview
enabled, the maximum instance index must: be less than or equal to
slink:VkPhysicalDeviceMultiviewPropertiesKHX::pname:maxMultiviewInstanceIndex.
endif::VK_KHX_multiview[]
@ -911,10 +911,10 @@ similarly named parameters of flink:vkCmdDraw.
.Valid Usage
****
* For a given vertex buffer binding, any attribute data fetched must: be
* [[VUID-VkDrawIndirectCommand-None-00500]] For a given vertex buffer binding, any attribute data fetched must: be
entirely contained within the corresponding vertex buffer binding, as
described in <<fxvertex-input>>
* If the
* [[VUID-VkDrawIndirectCommand-firstInstance-00501]] If the
<<features-features-drawIndirectFirstInstance,drawIndirectFirstInstance>>
feature is not enabled, pname:firstInstance must: be code:0
****
@ -954,66 +954,66 @@ located at pname:countBufferOffset and use this as the draw count.
.Valid Usage
****
* pname:offset must: be a multiple of `4`
* pname:countBufferOffset must: be a multiple of `4`
* pname:stride must: be a multiple of `4` and must: be greater than or
* [[VUID-vkCmdDrawIndirectCountAMD-offset-00502]] pname:offset must: be a multiple of `4`
* [[VUID-vkCmdDrawIndirectCountAMD-countBufferOffset-00503]] pname:countBufferOffset must: be a multiple of `4`
* [[VUID-vkCmdDrawIndirectCountAMD-stride-00504]] pname:stride must: be a multiple of `4` and must: be greater than or
equal to sizeof(sname:VkDrawIndirectCommand)
* If pname:maxDrawCount is greater than or equal to `1`,
* [[VUID-vkCmdDrawIndirectCountAMD-maxDrawCount-00505]] If pname:maxDrawCount is greater than or equal to `1`,
[eq]#(pname:stride {times} (pname:maxDrawCount - 1) + pname:offset
{plus} sizeof(sname:VkDrawIndirectCommand))# must: be less than or equal
to the size of pname:buffer
* If the
* [[VUID-vkCmdDrawIndirectCountAMD-firstInstance-00506]] If the
<<features-features-drawIndirectFirstInstance,drawIndirectFirstInstance>>
feature is not enabled, all the pname:firstInstance members of the
sname:VkDrawIndirectCommand structures accessed by this command must: be
code:0
* The current render pass must: be <<renderpass-compatibility,compatible>>
* [[VUID-vkCmdDrawIndirectCountAMD-renderPass-00507]] The current render pass must: be <<renderpass-compatibility,compatible>>
with the pname:renderPass member of the
sname:VkGraphicsPipelineCreateInfo structure specified when creating the
sname:VkPipeline currently bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS.
* The subpass index of the current render pass must: be equal to the
* [[VUID-vkCmdDrawIndirectCountAMD-subpass-00508]] The subpass index of the current render pass must: be equal to the
pname:subpass member of the sname:VkGraphicsPipelineCreateInfo structure
specified when creating the sname:VkPipeline currently bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS.
* For each set _n_ that is statically used by the sname:VkPipeline
* [[VUID-vkCmdDrawIndirectCountAMD-None-00509]] For each set _n_ that is statically used by the sname:VkPipeline
currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS, a descriptor
set must: have been bound to _n_ at
ename:VK_PIPELINE_BIND_POINT_GRAPHICS, with a sname:VkPipelineLayout
that is compatible for set _n_, with the sname:VkPipelineLayout used to
create the current sname:VkPipeline, as described in
<<descriptorsets-compatibility>>
* For each push constant that is statically used by the sname:VkPipeline
* [[VUID-vkCmdDrawIndirectCountAMD-None-00510]] For each push constant that is statically used by the sname:VkPipeline
currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS, a push
constant value must: have been set for
ename:VK_PIPELINE_BIND_POINT_GRAPHICS, with a sname:VkPipelineLayout
that is compatible for push constants, with the sname:VkPipelineLayout
used to create the current sname:VkPipeline, as described in
<<descriptorsets-compatibility>>
* Descriptors in each bound descriptor set, specified via
* [[VUID-vkCmdDrawIndirectCountAMD-None-00511]] Descriptors in each bound descriptor set, specified via
fname:vkCmdBindDescriptorSets, must: be valid if they are statically
used by the currently bound sname:VkPipeline object, specified via
fname:vkCmdBindPipeline
* All vertex input bindings accessed via vertex input variables declared
* [[VUID-vkCmdDrawIndirectCountAMD-None-00512]] All vertex input bindings accessed via vertex input variables declared
in the vertex shader entry point's interface must: have valid buffers
bound
* A valid graphics pipeline must: be bound to the current command buffer
* [[VUID-vkCmdDrawIndirectCountAMD-None-00513]] A valid graphics pipeline must: be bound to the current command buffer
with ename:VK_PIPELINE_BIND_POINT_GRAPHICS
* If the sname:VkPipeline object currently bound to
* [[VUID-vkCmdDrawIndirectCountAMD-None-00514]] If the sname:VkPipeline object currently bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS requires any dynamic state, that
state must: have been set on the current command buffer
* If the count stored in pname:countBuffer is equal to `1`,
* [[VUID-vkCmdDrawIndirectCountAMD-countBuffer-00515]] If the count stored in pname:countBuffer is equal to `1`,
[eq]#(pname:offset + sizeof(sname:VkDrawIndirectCommand))# must: be less
than or equal to the size of pname:buffer
* If the count stored in pname:countBuffer is greater than `1`,
* [[VUID-vkCmdDrawIndirectCountAMD-countBuffer-00516]] If the count stored in pname:countBuffer is greater than `1`,
[eq]#(pname:stride {times} (pname:drawCount - 1) + pname:offset {plus}
sizeof(sname:VkDrawIndirectCommand))# must: be less than or equal to the
size of pname:buffer
* The count stored in pname:countBuffer must: be less than or equal to
* [[VUID-vkCmdDrawIndirectCountAMD-countBuffer-00517]] The count stored in pname:countBuffer must: be less than or equal to
sname:VkPhysicalDeviceLimits::pname:maxDrawIndirectCount
* Every input attachment used by the current subpass must: be bound to the
* [[VUID-vkCmdDrawIndirectCountAMD-None-00518]] Every input attachment used by the current subpass must: be bound to the
pipeline via a descriptor set
* If any sname:VkSampler object that is accessed from a shader by the
* [[VUID-vkCmdDrawIndirectCountAMD-None-00519]] If any sname:VkSampler object that is accessed from a shader by the
sname:VkPipeline currently bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses unnormalized coordinates, it
must: not be used to sample from any sname:VkImage with a
@ -1021,29 +1021,29 @@ located at pname:countBufferOffset and use this as the draw count.
ename:VK_IMAGE_VIEW_TYPE_CUBE, ename:VK_IMAGE_VIEW_TYPE_1D_ARRAY,
ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY or
ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY, in any shader stage
* If any sname:VkSampler object that is accessed from a shader by the
* [[VUID-vkCmdDrawIndirectCountAMD-None-00520]] If any sname:VkSampler object that is accessed from a shader by the
sname:VkPipeline currently bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses unnormalized coordinates, it
must: not be used with any of the SPIR-V `OpImageSample*` or
`OpImageSparseSample*` instructions with code:ImplicitLod, code:Dref or
code:Proj in their name, in any shader stage
* If any sname:VkSampler object that is accessed from a shader by the
* [[VUID-vkCmdDrawIndirectCountAMD-None-00521]] If any sname:VkSampler object that is accessed from a shader by the
sname:VkPipeline currently bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses unnormalized coordinates, it
must: not be used with any of the SPIR-V `OpImageSample*` or
`OpImageSparseSample*` instructions that includes a LOD bias or any
offset values, in any shader stage
* If the <<features-features-robustBufferAccess,robust buffer access>>
* [[VUID-vkCmdDrawIndirectCountAMD-None-00522]] If the <<features-features-robustBufferAccess,robust buffer access>>
feature is not enabled, and any shader stage in the sname:VkPipeline
object currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS accesses
a uniform buffer, it must: not access values outside of the range of
that buffer specified in the currently bound descriptor set
* If the <<features-features-robustBufferAccess,robust buffer access>>
* [[VUID-vkCmdDrawIndirectCountAMD-None-00523]] If the <<features-features-robustBufferAccess,robust buffer access>>
feature is not enabled, and any shader stage in the sname:VkPipeline
object currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS accesses
a storage buffer, it must: not access values outside of the range of
that buffer specified in the currently bound descriptor set
* Any sname:VkImageView being sampled with ename:VK_FILTER_LINEAR as a
* [[VUID-vkCmdDrawIndirectCountAMD-linearTilingFeatures-00524]] Any sname:VkImageView being sampled with ename:VK_FILTER_LINEAR as a
result of this command must: be of a format which supports linear
filtering, as specified by the
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in
@ -1052,7 +1052,7 @@ located at pname:countBufferOffset and use this as the draw count.
optimally tiled image) returned by
fname:vkGetPhysicalDeviceFormatProperties
ifdef::VK_KHX_multiview[]
* If the draw is recorded in a render pass instance with multiview
* [[VUID-vkCmdDrawIndirectCountAMD-maxMultiviewInstanceIndex-00525]] If the draw is recorded in a render pass instance with multiview
enabled, the maximum instance index must: be less than or equal to
slink:VkPhysicalDeviceMultiviewPropertiesKHX::pname:maxMultiviewInstanceIndex.
endif::VK_KHX_multiview[]
@ -1090,66 +1090,66 @@ If pname:drawCount is less than or equal to one, pname:stride is ignored.
.Valid Usage
****
* If pname:buffer is non-sparse then it must: be bound completely and
* [[VUID-vkCmdDrawIndexedIndirect-buffer-00526]] If pname:buffer is non-sparse then it must: be bound completely and
contiguously to a single sname:VkDeviceMemory object
* pname:offset must: be a multiple of `4`
* If pname:drawCount is greater than `1`, pname:stride must: be a multiple
* [[VUID-vkCmdDrawIndexedIndirect-offset-00527]] pname:offset must: be a multiple of `4`
* [[VUID-vkCmdDrawIndexedIndirect-drawCount-00528]] If pname:drawCount is greater than `1`, pname:stride must: be a multiple
of `4` and must: be greater than or equal to
sizeof(sname:VkDrawIndexedIndirectCommand)
* If the <<features-features-multiDrawIndirect,multi-draw indirect>>
* [[VUID-vkCmdDrawIndexedIndirect-drawCount-00529]] If the <<features-features-multiDrawIndirect,multi-draw indirect>>
feature is not enabled, pname:drawCount must: be `0` or `1`
* If the
* [[VUID-vkCmdDrawIndexedIndirect-firstInstance-00530]] If the
<<features-features-drawIndirectFirstInstance,drawIndirectFirstInstance>>
feature is not enabled, all the pname:firstInstance members of the
sname:VkDrawIndexedIndirectCommand structures accessed by this command
must: be code:0
* The current render pass must: be <<renderpass-compatibility,compatible>>
* [[VUID-vkCmdDrawIndexedIndirect-renderPass-00531]] The current render pass must: be <<renderpass-compatibility,compatible>>
with the pname:renderPass member of the
sname:VkGraphicsPipelineCreateInfo structure specified when creating the
sname:VkPipeline currently bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS.
* The subpass index of the current render pass must: be equal to the
* [[VUID-vkCmdDrawIndexedIndirect-subpass-00532]] The subpass index of the current render pass must: be equal to the
pname:subpass member of the sname:VkGraphicsPipelineCreateInfo structure
specified when creating the sname:VkPipeline currently bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS.
* For each set _n_ that is statically used by the sname:VkPipeline
* [[VUID-vkCmdDrawIndexedIndirect-None-00533]] For each set _n_ that is statically used by the sname:VkPipeline
currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS, a descriptor
set must: have been bound to _n_ at
ename:VK_PIPELINE_BIND_POINT_GRAPHICS, with a sname:VkPipelineLayout
that is compatible for set _n_, with the sname:VkPipelineLayout used to
create the current sname:VkPipeline, as described in
<<descriptorsets-compatibility>>
* For each push constant that is statically used by the sname:VkPipeline
* [[VUID-vkCmdDrawIndexedIndirect-None-00534]] For each push constant that is statically used by the sname:VkPipeline
currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS, a push
constant value must: have been set for
ename:VK_PIPELINE_BIND_POINT_GRAPHICS, with a sname:VkPipelineLayout
that is compatible for push constants, with the sname:VkPipelineLayout
used to create the current sname:VkPipeline, as described in
<<descriptorsets-compatibility>>
* Descriptors in each bound descriptor set, specified via
* [[VUID-vkCmdDrawIndexedIndirect-None-00535]] Descriptors in each bound descriptor set, specified via
fname:vkCmdBindDescriptorSets, must: be valid if they are statically
used by the currently bound sname:VkPipeline object, specified via
fname:vkCmdBindPipeline
* All vertex input bindings accessed via vertex input variables declared
* [[VUID-vkCmdDrawIndexedIndirect-None-00536]] All vertex input bindings accessed via vertex input variables declared
in the vertex shader entry point's interface must: have valid buffers
bound
* A valid graphics pipeline must: be bound to the current command buffer
* [[VUID-vkCmdDrawIndexedIndirect-None-00537]] A valid graphics pipeline must: be bound to the current command buffer
with ename:VK_PIPELINE_BIND_POINT_GRAPHICS
* If the sname:VkPipeline object currently bound to
* [[VUID-vkCmdDrawIndexedIndirect-None-00538]] If the sname:VkPipeline object currently bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS requires any dynamic state, that
state must: have been set on the current command buffer
* If pname:drawCount is equal to `1`, [eq]#(pname:offset {plus}
* [[VUID-vkCmdDrawIndexedIndirect-drawCount-00539]] If pname:drawCount is equal to `1`, [eq]#(pname:offset {plus}
sizeof(sname:VkDrawIndexedIndirectCommand))# must: be less than or equal
to the size of pname:buffer
* If pname:drawCount is greater than `1`, [eq]#(pname:stride {times}
* [[VUID-vkCmdDrawIndexedIndirect-drawCount-00540]] If pname:drawCount is greater than `1`, [eq]#(pname:stride {times}
(pname:drawCount - 1) + pname:offset {plus}
sizeof(sname:VkDrawIndexedIndirectCommand))# must: be less than or equal
to the size of pname:buffer
* pname:drawCount must: be less than or equal to
* [[VUID-vkCmdDrawIndexedIndirect-drawCount-00541]] pname:drawCount must: be less than or equal to
sname:VkPhysicalDeviceLimits::pname:maxDrawIndirectCount
* Every input attachment used by the current subpass must: be bound to the
* [[VUID-vkCmdDrawIndexedIndirect-None-00542]] Every input attachment used by the current subpass must: be bound to the
pipeline via a descriptor set
* If any sname:VkSampler object that is accessed from a shader by the
* [[VUID-vkCmdDrawIndexedIndirect-None-00543]] If any sname:VkSampler object that is accessed from a shader by the
sname:VkPipeline currently bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses unnormalized coordinates, it
must: not be used to sample from any sname:VkImage with a
@ -1157,29 +1157,29 @@ If pname:drawCount is less than or equal to one, pname:stride is ignored.
ename:VK_IMAGE_VIEW_TYPE_CUBE, ename:VK_IMAGE_VIEW_TYPE_1D_ARRAY,
ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY or
ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY, in any shader stage
* If any sname:VkSampler object that is accessed from a shader by the
* [[VUID-vkCmdDrawIndexedIndirect-None-00544]] If any sname:VkSampler object that is accessed from a shader by the
sname:VkPipeline currently bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses unnormalized coordinates, it
must: not be used with any of the SPIR-V `OpImageSample*` or
`OpImageSparseSample*` instructions with code:ImplicitLod, code:Dref or
code:Proj in their name, in any shader stage
* If any sname:VkSampler object that is accessed from a shader by the
* [[VUID-vkCmdDrawIndexedIndirect-None-00545]] If any sname:VkSampler object that is accessed from a shader by the
sname:VkPipeline currently bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses unnormalized coordinates, it
must: not be used with any of the SPIR-V `OpImageSample*` or
`OpImageSparseSample*` instructions that includes a LOD bias or any
offset values, in any shader stage
* If the <<features-features-robustBufferAccess,robust buffer access>>
* [[VUID-vkCmdDrawIndexedIndirect-None-00546]] If the <<features-features-robustBufferAccess,robust buffer access>>
feature is not enabled, and any shader stage in the sname:VkPipeline
object currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS accesses
a uniform buffer, it must: not access values outside of the range of
that buffer specified in the currently bound descriptor set
* If the <<features-features-robustBufferAccess,robust buffer access>>
* [[VUID-vkCmdDrawIndexedIndirect-None-00547]] If the <<features-features-robustBufferAccess,robust buffer access>>
feature is not enabled, and any shader stage in the sname:VkPipeline
object currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS accesses
a storage buffer, it must: not access values outside of the range of
that buffer specified in the currently bound descriptor set
* Any sname:VkImageView being sampled with ename:VK_FILTER_LINEAR as a
* [[VUID-vkCmdDrawIndexedIndirect-linearTilingFeatures-00548]] Any sname:VkImageView being sampled with ename:VK_FILTER_LINEAR as a
result of this command must: be of a format which supports linear
filtering, as specified by the
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in
@ -1188,7 +1188,7 @@ If pname:drawCount is less than or equal to one, pname:stride is ignored.
optimally tiled image) returned by
fname:vkGetPhysicalDeviceFormatProperties
ifdef::VK_IMG_filter_cubic[]
* Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_IMG as a
* [[VUID-vkCmdDrawIndexedIndirect-linearTilingFeatures-00549]] Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_IMG as a
result of this command must: be of a format which supports cubic
filtering, as specified by the
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG flag in
@ -1196,13 +1196,13 @@ ifdef::VK_IMG_filter_cubic[]
image) or sname:VkFormatProperties::pname:optimalTilingFeatures(for an
optimally tiled image) returned by
fname:vkGetPhysicalDeviceFormatProperties
* Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_IMG as a
* [[VUID-vkCmdDrawIndexedIndirect-None-00550]] Any slink:VkImageView being sampled with ename:VK_FILTER_CUBIC_IMG as a
result of this command must: not have a elink:VkImageViewType of
ename:VK_IMAGE_VIEW_TYPE_3D, ename:VK_IMAGE_VIEW_TYPE_CUBE, or
ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY
endif::VK_IMG_filter_cubic[]
ifdef::VK_KHX_multiview[]
* If the draw is recorded in a render pass instance with multiview
* [[VUID-vkCmdDrawIndexedIndirect-maxMultiviewInstanceIndex-00551]] If the draw is recorded in a render pass instance with multiview
enabled, the maximum instance index must: be less than or equal to
slink:VkPhysicalDeviceMultiviewPropertiesKHX::pname:maxMultiviewInstanceIndex.
endif::VK_KHX_multiview[]
@ -1228,15 +1228,15 @@ the similarly named parameters of flink:vkCmdDrawIndexed.
.Valid Usage
****
* For a given vertex buffer binding, any attribute data fetched must: be
* [[VUID-VkDrawIndexedIndirectCommand-None-00552]] For a given vertex buffer binding, any attribute data fetched must: be
entirely contained within the corresponding vertex buffer binding, as
described in <<fxvertex-input>>
* (pname:indexSize * (pname:firstIndex + pname:indexCount) + pname:offset)
* [[VUID-VkDrawIndexedIndirectCommand-indexSize-00553]] (pname:indexSize * (pname:firstIndex + pname:indexCount) + pname:offset)
must: be less than or equal to the size of the currently bound index
buffer, with pname:indexSize being based on the type specified by
pname:indexType, where the index buffer, pname:indexType, and
pname:offset are specified via fname:vkCmdBindIndexBuffer
* If the
* [[VUID-VkDrawIndexedIndirectCommand-firstInstance-00554]] If the
<<features-features-drawIndirectFirstInstance,drawIndirectFirstInstance>>
feature is not enabled, pname:firstInstance must: be code:0
****
@ -1276,66 +1276,66 @@ located at pname:countBufferOffset and use this as the draw count.
.Valid Usage
****
* pname:offset must: be a multiple of `4`
* pname:countBufferOffset must: be a multiple of `4`
* pname:stride must: be a multiple of `4` and must: be greater than or
* [[VUID-vkCmdDrawIndexedIndirectCountAMD-offset-00555]] pname:offset must: be a multiple of `4`
* [[VUID-vkCmdDrawIndexedIndirectCountAMD-countBufferOffset-00556]] pname:countBufferOffset must: be a multiple of `4`
* [[VUID-vkCmdDrawIndexedIndirectCountAMD-stride-00557]] pname:stride must: be a multiple of `4` and must: be greater than or
equal to sizeof(sname:VkDrawIndirectCommand)
* If pname:maxDrawCount is greater than or equal to `1`,
* [[VUID-vkCmdDrawIndexedIndirectCountAMD-maxDrawCount-00558]] If pname:maxDrawCount is greater than or equal to `1`,
[eq]#(pname:stride {times} (pname:maxDrawCount - 1) + pname:offset
{plus} sizeof(sname:VkDrawIndirectCommand))# must: be less than or equal
to the size of pname:buffer
* If the
* [[VUID-vkCmdDrawIndexedIndirectCountAMD-firstInstance-00559]] If the
<<features-features-drawIndirectFirstInstance,drawIndirectFirstInstance>>
feature is not enabled, all the pname:firstInstance members of the
sname:VkDrawIndexedIndirectCommand structures accessed by this command
must: be code:0
* The current render pass must: be <<renderpass-compatibility,compatible>>
* [[VUID-vkCmdDrawIndexedIndirectCountAMD-renderPass-00560]] The current render pass must: be <<renderpass-compatibility,compatible>>
with the pname:renderPass member of the
sname:VkGraphicsPipelineCreateInfo structure specified when creating the
sname:VkPipeline currently bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS.
* The subpass index of the current render pass must: be equal to the
* [[VUID-vkCmdDrawIndexedIndirectCountAMD-subpass-00561]] The subpass index of the current render pass must: be equal to the
pname:subpass member of the sname:VkGraphicsPipelineCreateInfo structure
specified when creating the sname:VkPipeline currently bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS.
* For each set _n_ that is statically used by the sname:VkPipeline
* [[VUID-vkCmdDrawIndexedIndirectCountAMD-None-00562]] For each set _n_ that is statically used by the sname:VkPipeline
currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS, a descriptor
set must: have been bound to _n_ at
ename:VK_PIPELINE_BIND_POINT_GRAPHICS, with a sname:VkPipelineLayout
that is compatible for set _n_, with the sname:VkPipelineLayout used to
create the current sname:VkPipeline, as described in
<<descriptorsets-compatibility>>
* For each push constant that is statically used by the sname:VkPipeline
* [[VUID-vkCmdDrawIndexedIndirectCountAMD-None-00563]] For each push constant that is statically used by the sname:VkPipeline
currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS, a push
constant value must: have been set for
ename:VK_PIPELINE_BIND_POINT_GRAPHICS, with a sname:VkPipelineLayout
that is compatible for push constants, with the sname:VkPipelineLayout
used to create the current sname:VkPipeline, as described in
<<descriptorsets-compatibility>>
* Descriptors in each bound descriptor set, specified via
* [[VUID-vkCmdDrawIndexedIndirectCountAMD-None-00564]] Descriptors in each bound descriptor set, specified via
fname:vkCmdBindDescriptorSets, must: be valid if they are statically
used by the currently bound sname:VkPipeline object, specified via
fname:vkCmdBindPipeline
* All vertex input bindings accessed via vertex input variables declared
* [[VUID-vkCmdDrawIndexedIndirectCountAMD-None-00565]] All vertex input bindings accessed via vertex input variables declared
in the vertex shader entry point's interface must: have valid buffers
bound
* A valid graphics pipeline must: be bound to the current command buffer
* [[VUID-vkCmdDrawIndexedIndirectCountAMD-None-00566]] A valid graphics pipeline must: be bound to the current command buffer
with ename:VK_PIPELINE_BIND_POINT_GRAPHICS
* If the sname:VkPipeline object currently bound to
* [[VUID-vkCmdDrawIndexedIndirectCountAMD-None-00567]] If the sname:VkPipeline object currently bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS requires any dynamic state, that
state must: have been set on the current command buffer
* If count stored in pname:countBuffer is equal to `1`, [eq]#(pname:offset
* [[VUID-vkCmdDrawIndexedIndirectCountAMD-countBuffer-00568]] If count stored in pname:countBuffer is equal to `1`, [eq]#(pname:offset
{plus} sizeof(sname:VkDrawIndexedIndirectCommand))# must: be less than
or equal to the size of pname:buffer
* If count stored in pname:countBuffer is greater than `1`,
* [[VUID-vkCmdDrawIndexedIndirectCountAMD-countBuffer-00569]] If count stored in pname:countBuffer is greater than `1`,
[eq]#(pname:stride {times} (pname:drawCount - 1) + pname:offset {plus}
sizeof(sname:VkDrawIndexedIndirectCommand))# must: be less than or equal
to the size of pname:buffer
* pname:drawCount must: be less than or equal to
* [[VUID-vkCmdDrawIndexedIndirectCountAMD-drawCount-00570]] pname:drawCount must: be less than or equal to
sname:VkPhysicalDeviceLimits::pname:maxDrawIndirectCount
* Every input attachment used by the current subpass must: be bound to the
* [[VUID-vkCmdDrawIndexedIndirectCountAMD-None-00571]] Every input attachment used by the current subpass must: be bound to the
pipeline via a descriptor set
* If any sname:VkSampler object that is accessed from a shader by the
* [[VUID-vkCmdDrawIndexedIndirectCountAMD-None-00572]] If any sname:VkSampler object that is accessed from a shader by the
sname:VkPipeline currently bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses unnormalized coordinates, it
must: not be used to sample from any sname:VkImage with a
@ -1343,29 +1343,29 @@ located at pname:countBufferOffset and use this as the draw count.
ename:VK_IMAGE_VIEW_TYPE_CUBE, ename:VK_IMAGE_VIEW_TYPE_1D_ARRAY,
ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY or
ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY, in any shader stage
* If any sname:VkSampler object that is accessed from a shader by the
* [[VUID-vkCmdDrawIndexedIndirectCountAMD-None-00573]] If any sname:VkSampler object that is accessed from a shader by the
sname:VkPipeline currently bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses unnormalized coordinates, it
must: not be used with any of the SPIR-V `OpImageSample*` or
`OpImageSparseSample*` instructions with code:ImplicitLod, code:Dref or
code:Proj in their name, in any shader stage
* If any sname:VkSampler object that is accessed from a shader by the
* [[VUID-vkCmdDrawIndexedIndirectCountAMD-None-00574]] If any sname:VkSampler object that is accessed from a shader by the
sname:VkPipeline currently bound to
ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses unnormalized coordinates, it
must: not be used with any of the SPIR-V `OpImageSample*` or
`OpImageSparseSample*` instructions that includes a LOD bias or any
offset values, in any shader stage
* If the <<features-features-robustBufferAccess,robust buffer access>>
* [[VUID-vkCmdDrawIndexedIndirectCountAMD-None-00575]] If the <<features-features-robustBufferAccess,robust buffer access>>
feature is not enabled, and any shader stage in the sname:VkPipeline
object currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS accesses
a uniform buffer, it must: not access values outside of the range of
that buffer specified in the currently bound descriptor set
* If the <<features-features-robustBufferAccess,robust buffer access>>
* [[VUID-vkCmdDrawIndexedIndirectCountAMD-None-00576]] If the <<features-features-robustBufferAccess,robust buffer access>>
feature is not enabled, and any shader stage in the sname:VkPipeline
object currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS accesses
a storage buffer, it must: not access values outside of the range of
that buffer specified in the currently bound descriptor set
* Any sname:VkImageView being sampled with ename:VK_FILTER_LINEAR as a
* [[VUID-vkCmdDrawIndexedIndirectCountAMD-linearTilingFeatures-00577]] Any sname:VkImageView being sampled with ename:VK_FILTER_LINEAR as a
result of this command must: be of a format which supports linear
filtering, as specified by the
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT flag in
@ -1374,7 +1374,7 @@ located at pname:countBufferOffset and use this as the draw count.
optimally tiled image) returned by
fname:vkGetPhysicalDeviceFormatProperties
ifdef::VK_KHX_multiview[]
* If the draw is recorded in a render pass instance with multiview
* [[VUID-vkCmdDrawIndexedIndirectCountAMD-maxMultiviewInstanceIndex-00578]] If the draw is recorded in a render pass instance with multiview
enabled, the maximum instance index must: be less than or equal to
slink:VkPhysicalDeviceMultiviewPropertiesKHX::pname:maxMultiviewInstanceIndex.
endif::VK_KHX_multiview[]

View File

@ -249,12 +249,6 @@ The extensions supported by a layer may also change between two calls, e.g.
if the layer implementation is replaced by a different version between those
calls.
.Valid Usage
****
* If pname:pLayerName is not `NULL`, it must: be the name of a layer
returned by flink:vkEnumerateInstanceLayerProperties
****
include::../validity/protos/vkEnumerateInstanceExtensionProperties.txt[]
To enable an instance extension, the name of the extension should: be added
@ -287,12 +281,6 @@ Vulkan implementation or by implicitly enabled layers are returned.
When pname:pLayerName is the name of a layer, the device extensions provided
by that layer are returned.
.Valid Usage
****
* If pname:pLayerName is not `NULL`, it must: be the name of a layer
returned by flink:vkEnumerateDeviceLayerProperties
****
include::../validity/protos/vkEnumerateDeviceExtensionProperties.txt[]
// refBegin VkExtensionProperties Structure specifying a extension properties
@ -312,67 +300,39 @@ include::../validity/structs/VkExtensionProperties.txt[]
[[extended-functionality-instance-extensions-and-devices]]
=== Instance Extensions and Device Extensions
Because an instance extension can affect the operation of an instance and
any of its child objects, the decision to expose functionality as an
instance extension or as a device extension is not always clear.
This section provides some guidelines and rules for when to expose new
functionality as an instance extension, device extension, or both.
functionality as an instance extension, as a device extension, or as
both.
The decision depends on the scope of the new functionality; such as
whether it extends instance-level or device-level functionality.
All Vulkan commands, structures, and enumerants are considered either
instance-level, physical-device-level, or device-level.
The decision is influenced by whether extension functionality affects
instance-level objects (e.g. instances and physical devices) and commands,
or device-level objects (e.g. logical devices, queues, and command buffers)
and commands, or both.
Commands that are dispatched from instances (sname:VkInstance) are
considered instance-level commands.
Any structure, enumerated type, and enumerant that is used with
instance-level commands are considered instance-level objects.
New instance-level extension functionality must: be structured within an
instance extension.
In some cases, the decision is clear:
Any command or object that must: be used after calling
flink:vkCreateDevice is a device-level command or object.
These objects include all children of sname:VkDevice objects, such as
queues (sname:VkQueue) and command buffers (sname:VkCommandBuffer).
New device-level extension functionality may: be structured
within a device extension.
* Functionality that is restricted to the instance-level must: be
implemented as an instance extension.
* Functionality that is restricted to the device-level must: be
implemented as a device extension.
In other cases, the decision is not so clear:
* Global functionality that affects the entire Vulkan API, including
instance and device-level objects and commands, should: be an instance
extension.
* Device-level functionality that contains physical-device queries, can:
be implemented as an instance extension.
If some part of an instance extension's functionality might not be
available on all physical devices, the extension should: provide a query
to determine which physical devices provide the functionality.
Commands that are dispatched from physical devices
(sname:VkPhysicalDevice) are considered physical-device-level commands.
Any structure, enumerated type, and enumerant that is used with
physical-device-level commands, and not used with instance-level
commands, are considered physical-device-level objects.
Vulkan 1.0 requires all new physical-device-level extension
functionality to be structured within an instance extension.
ifdef::VK_KHR_get_physical_device_properties2[]
The +VK_KHR_get_physical_device_properties2+ extension allows such
functionality to be implemented as a device extension.
In order to avoid using an instance extension, which often requires
loader support, the +VK_KHR_get_physical_device_properties2+ extension
allows physical-device-level extension functionality to be implemented
within device extensions (which must: depend on the
+VK_KHR_get_physical_device_properties2+ extension).
endif::VK_KHR_get_physical_device_properties2[]
* For a set of global functionality that provides new instance-level and
device-level commands, and can: be enabled for a subset of devices,
functionality should: be partitioned across two extensions -- one for
the instance-level functionality, and one for the device-specific
functionality.
In the latter case, the two extensions should: have unique names.
Examples of instance extensions include:
* Logging of debug messages by any enabled layers for all Vulkan commands.
* Functionality creating new objects which are direct children of an
instance.
* Functionality creating new objects which are direct children of a
physical device and intended to work with any logical device created
from the physical device.
* Functionality adding new instance-level Vulkan commands that do not
affect any device-level commands.
[NOTE]
.Note
====
Instance extensions generally require support in the Vulkan loader.
This is especially true for commands that are dispatched from instances and
physical devices.
Additional information about supporting instance-level commands may be found
in the <<LoaderAndValidationLayers, _Vulkan Loader Specification and
Architecture Overview_>> document.
Please see the "Architectural overview of layers and loader" section for
information about how both instance-level and device-level commands are
supported and dispatched.
====

View File

@ -733,7 +733,7 @@ additional supported properties of individual formats.
.Valid Usage
****
* If any member of this structure is ename:VK_FALSE, as returned by
* [[VUID-VkPhysicalDeviceFeatures-None-00579]] If any member of this structure is ename:VK_FALSE, as returned by
flink:vkGetPhysicalDeviceFeatures, then it must: be ename:VK_FALSE when
passed as part of the sname:VkDeviceCreateInfo struct when creating a
device
@ -776,9 +776,9 @@ pname:pNext chain of flink:vkCreateDevice to enable features.
.Valid Usage
****
* If pname:multiviewGeometryShader is enabled then pname:multiview must:
* [[VUID-VkPhysicalDeviceMultiviewFeaturesKHX-multiviewGeometryShader-00580]] If pname:multiviewGeometryShader is enabled then pname:multiview must:
also be enabled.
* If pname:multiviewTessellationShader is enabled then pname:multiview
* [[VUID-VkPhysicalDeviceMultiviewFeaturesKHX-multiviewTessellationShader-00581]] If pname:multiviewTessellationShader is enabled then pname:multiview
must: also be enabled.
****

View File

@ -66,7 +66,7 @@ include::../api/structs/VkPipelineDiscardRectangleStateCreateInfoEXT.txt[]
.Valid Usage
****
* pname:discardRectangleCount must: be between `0` and
* [[VUID-VkPipelineDiscardRectangleStateCreateInfoEXT-discardRectangleCount-00582]] pname:discardRectangleCount must: be between `0` and
sname:VkPhysicalDeviceDiscardRectanglePropertiesEXT::pname:maxDiscardRectangles,
inclusive
****
@ -105,21 +105,21 @@ pname:discardRectangleCount)#.
.Valid Usage
****
* The currently bound graphics pipeline must: have been created with the
* [[VUID-vkCmdSetDiscardRectangleEXT-None-00583]] The currently bound graphics pipeline must: have been created with the
ename:VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT dynamic state enabled
* pname:firstDiscardRectangle must: be less than
* [[VUID-vkCmdSetDiscardRectangleEXT-firstDiscardRectangle-00584]] pname:firstDiscardRectangle must: be less than
sname:VkPhysicalDeviceDiscardRectanglePropertiesEXT.pname:maxDiscardRectangles
* The sum of pname:firstDiscardRectangle and pname:discardRectangleCount
* [[VUID-vkCmdSetDiscardRectangleEXT-firstDiscardRectangle-00585]] The sum of pname:firstDiscardRectangle and pname:discardRectangleCount
must: be between `1` and
sname:VkPhysicalDeviceDiscardRectanglePropertiesEXT::pname:maxDiscardRectangles,
inclusive
* pname:pDiscardRectangles must: be a pointer to an array of
* [[VUID-vkCmdSetDiscardRectangleEXT-pDiscardRectangles-00586]] pname:pDiscardRectangles must: be a pointer to an array of
pname:discardRectangleCount valid sname:VkRect2D structures
* The pname:x and pname:y members of pname:offset in sname:VkRect2D must:
* [[VUID-vkCmdSetDiscardRectangleEXT-x-00587]] The pname:x and pname:y members of pname:offset in sname:VkRect2D must:
be greater than or equal to `0`
* Evaluation of (pname:offset.x + pname:extent.width) in sname:VkRect2D
* [[VUID-vkCmdSetDiscardRectangleEXT-offset-00588]] Evaluation of (pname:offset.x + pname:extent.width) in sname:VkRect2D
must: not cause a signed integer addition overflow
* Evaluation of (pname:offset.y + pname:extent.height) in sname:VkRect2D
* [[VUID-vkCmdSetDiscardRectangleEXT-offset-00589]] Evaluation of (pname:offset.y + pname:extent.height) in sname:VkRect2D
must: not cause a signed integer addition overflow
****
@ -189,21 +189,21 @@ values determining the size in pixels.
.Valid Usage
****
* The currently bound graphics pipeline must: have been created with the
* [[VUID-vkCmdSetScissor-None-00590]] The currently bound graphics pipeline must: have been created with the
ename:VK_DYNAMIC_STATE_SCISSOR dynamic state enabled
* pname:firstScissor must: be less than
* [[VUID-vkCmdSetScissor-firstScissor-00591]] pname:firstScissor must: be less than
sname:VkPhysicalDeviceLimits::pname:maxViewports
* The sum of pname:firstScissor and pname:scissorCount must: be between
* [[VUID-vkCmdSetScissor-firstScissor-00592]] The sum of pname:firstScissor and pname:scissorCount must: be between
`1` and sname:VkPhysicalDeviceLimits::pname:maxViewports, inclusive
* If the <<features-features-multiViewport,multiple viewports>> feature is
* [[VUID-vkCmdSetScissor-firstScissor-00593]] If the <<features-features-multiViewport,multiple viewports>> feature is
not enabled, pname:firstScissor must: be `0`
* If the <<features-features-multiViewport,multiple viewports>> feature is
* [[VUID-vkCmdSetScissor-scissorCount-00594]] If the <<features-features-multiViewport,multiple viewports>> feature is
not enabled, pname:scissorCount must: be `1`
* The pname:x and pname:y members of pname:offset must: be greater than or
* [[VUID-vkCmdSetScissor-x-00595]] The pname:x and pname:y members of pname:offset must: be greater than or
equal to `0`
* Evaluation of (pname:offset.x + pname:extent.width) must: not cause a
* [[VUID-vkCmdSetScissor-offset-00596]] Evaluation of (pname:offset.x + pname:extent.width) must: not cause a
signed integer addition overflow
* Evaluation of (pname:offset.y + pname:extent.height) must: not cause a
* [[VUID-vkCmdSetScissor-offset-00597]] Evaluation of (pname:offset.y + pname:extent.height) must: not cause a
signed integer addition overflow
****
@ -420,7 +420,8 @@ include::../api/structs/VkPipelineDepthStencilStateCreateInfo.txt[]
* pname:depthTestEnable controls whether <<fragops-depth,depth testing>>
is enabled.
* pname:depthWriteEnable controls whether <<fragops-depth-write,depth
writes>> are enabled.
writes>> are enabled when pname:depthTestEnable is ename:VK_TRUE. Depth
writes are always disabled when pname:depthTestEnable is ename:VK_FALSE.
* pname:depthCompareOp is the comparison operator used in the
<<fragops-depth,depth test>>.
* pname:depthBoundsTestEnable controls whether <<fragops-dbt,depth bounds
@ -434,7 +435,7 @@ include::../api/structs/VkPipelineDepthStencilStateCreateInfo.txt[]
.Valid Usage
****
* If the <<features-features-depthBounds,depth bounds testing>> feature is
* [[VUID-VkPipelineDepthStencilStateCreateInfo-depthBoundsTestEnable-00598]] If the <<features-features-depthBounds,depth bounds testing>> feature is
not enabled, pname:depthBoundsTestEnable must: be ename:VK_FALSE
****
@ -467,10 +468,10 @@ include::../api/protos/vkCmdSetDepthBounds.txt[]
.Valid Usage
****
* The currently bound graphics pipeline must: have been created with the
* [[VUID-vkCmdSetDepthBounds-None-00599]] The currently bound graphics pipeline must: have been created with the
ename:VK_DYNAMIC_STATE_DEPTH_BOUNDS dynamic state enabled
* pname:minDepthBounds must: be between `0.0` and `1.0`, inclusive
* pname:maxDepthBounds must: be between `0.0` and `1.0`, inclusive
* [[VUID-vkCmdSetDepthBounds-minDepthBounds-00600]] pname:minDepthBounds must: be between `0.0` and `1.0`, inclusive
* [[VUID-vkCmdSetDepthBounds-maxDepthBounds-00601]] pname:maxDepthBounds must: be between `0.0` and `1.0`, inclusive
****
include::../validity/protos/vkCmdSetDepthBounds.txt[]
@ -576,7 +577,7 @@ include::../api/enums/VkStencilFaceFlagBits.txt[]
.Valid Usage
****
* The currently bound graphics pipeline must: have been created with the
* [[VUID-vkCmdSetStencilCompareMask-None-00602]] The currently bound graphics pipeline must: have been created with the
ename:VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK dynamic state enabled
****
@ -599,7 +600,7 @@ include::../api/protos/vkCmdSetStencilWriteMask.txt[]
.Valid Usage
****
* The currently bound graphics pipeline must: have been created with the
* [[VUID-vkCmdSetStencilWriteMask-None-00603]] The currently bound graphics pipeline must: have been created with the
ename:VK_DYNAMIC_STATE_STENCIL_WRITE_MASK dynamic state enabled
****
@ -622,7 +623,7 @@ include::../api/protos/vkCmdSetStencilReference.txt[]
.Valid Usage
****
* The currently bound graphics pipeline must: have been created with the
* [[VUID-vkCmdSetStencilReference-None-00604]] The currently bound graphics pipeline must: have been created with the
ename:VK_DYNAMIC_STATE_STENCIL_REFERENCE dynamic state enabled
****

View File

@ -70,12 +70,12 @@ elements in the pname:pAttachments array must: be identical.
.Valid Usage
****
* If the <<features-features-independentBlend,independent blending>>
* [[VUID-VkPipelineColorBlendStateCreateInfo-pAttachments-00605]] If the <<features-features-independentBlend,independent blending>>
feature is not enabled, all elements of pname:pAttachments must: be
identical
* If the <<features-features-logicOp,logic operations>> feature is not
* [[VUID-VkPipelineColorBlendStateCreateInfo-logicOpEnable-00606]] If the <<features-features-logicOp,logic operations>> feature is not
enabled, pname:logicOpEnable must: be ename:VK_FALSE
* If pname:logicOpEnable is ename:VK_TRUE, pname:logicOp must: be a valid
* [[VUID-VkPipelineColorBlendStateCreateInfo-logicOpEnable-00607]] If pname:logicOpEnable is ename:VK_TRUE, pname:logicOp must: be a valid
elink:VkLogicOp value
****
@ -109,25 +109,25 @@ include::../api/structs/VkPipelineColorBlendAttachmentState.txt[]
.Valid Usage
****
* If the <<features-features-dualSrcBlend,dual source blending>> feature
* [[VUID-VkPipelineColorBlendAttachmentState-srcColorBlendFactor-00608]] If the <<features-features-dualSrcBlend,dual source blending>> feature
is not enabled, pname:srcColorBlendFactor must: not be
ename:VK_BLEND_FACTOR_SRC1_COLOR,
ename:VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR,
ename:VK_BLEND_FACTOR_SRC1_ALPHA, or
ename:VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA
* If the <<features-features-dualSrcBlend,dual source blending>> feature
* [[VUID-VkPipelineColorBlendAttachmentState-dstColorBlendFactor-00609]] If the <<features-features-dualSrcBlend,dual source blending>> feature
is not enabled, pname:dstColorBlendFactor must: not be
ename:VK_BLEND_FACTOR_SRC1_COLOR,
ename:VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR,
ename:VK_BLEND_FACTOR_SRC1_ALPHA, or
ename:VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA
* If the <<features-features-dualSrcBlend,dual source blending>> feature
* [[VUID-VkPipelineColorBlendAttachmentState-srcAlphaBlendFactor-00610]] If the <<features-features-dualSrcBlend,dual source blending>> feature
is not enabled, pname:srcAlphaBlendFactor must: not be
ename:VK_BLEND_FACTOR_SRC1_COLOR,
ename:VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR,
ename:VK_BLEND_FACTOR_SRC1_ALPHA, or
ename:VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA
* If the <<features-features-dualSrcBlend,dual source blending>> feature
* [[VUID-VkPipelineColorBlendAttachmentState-dstAlphaBlendFactor-00611]] If the <<features-features-dualSrcBlend,dual source blending>> feature
is not enabled, pname:dstAlphaBlendFactor must: not be
ename:VK_BLEND_FACTOR_SRC1_COLOR,
ename:VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR,
@ -213,7 +213,7 @@ include::../api/protos/vkCmdSetBlendConstants.txt[]
.Valid Usage
****
* The currently bound graphics pipeline must: have been created with the
* [[VUID-vkCmdSetBlendConstants-None-00612]] The currently bound graphics pipeline must: have been created with the
ename:VK_DYNAMIC_STATE_BLEND_CONSTANTS dynamic state enabled
****

View File

@ -292,17 +292,17 @@ include::../api/structs/VkPipelineVertexInputStateCreateInfo.txt[]
.Valid Usage
****
* pname:vertexBindingDescriptionCount must: be less than or equal to
* [[VUID-VkPipelineVertexInputStateCreateInfo-vertexBindingDescriptionCount-00613]] pname:vertexBindingDescriptionCount must: be less than or equal to
sname:VkPhysicalDeviceLimits::pname:maxVertexInputBindings
* pname:vertexAttributeDescriptionCount must: be less than or equal to
* [[VUID-VkPipelineVertexInputStateCreateInfo-vertexAttributeDescriptionCount-00614]] pname:vertexAttributeDescriptionCount must: be less than or equal to
sname:VkPhysicalDeviceLimits::pname:maxVertexInputAttributes
* For every pname:binding specified by any given element of
* [[VUID-VkPipelineVertexInputStateCreateInfo-binding-00615]] For every pname:binding specified by any given element of
pname:pVertexAttributeDescriptions, a
sname:VkVertexInputBindingDescription must: exist in
pname:pVertexBindingDescriptions with the same value of pname:binding
* All elements of pname:pVertexBindingDescriptions must: describe distinct
* [[VUID-VkPipelineVertexInputStateCreateInfo-pVertexBindingDescriptions-00616]] All elements of pname:pVertexBindingDescriptions must: describe distinct
binding numbers
* All elements of pname:pVertexAttributeDescriptions must: describe
* [[VUID-VkPipelineVertexInputStateCreateInfo-pVertexAttributeDescriptions-00617]] All elements of pname:pVertexAttributeDescriptions must: describe
distinct attribute locations
****
@ -336,9 +336,9 @@ include::../api/enums/VkVertexInputRate.txt[]
.Valid Usage
****
* pname:binding must: be less than
* [[VUID-VkVertexInputBindingDescription-binding-00618]] pname:binding must: be less than
sname:VkPhysicalDeviceLimits::pname:maxVertexInputBindings
* pname:stride must: be less than or equal to
* [[VUID-VkVertexInputBindingDescription-stride-00619]] pname:stride must: be less than or equal to
sname:VkPhysicalDeviceLimits::pname:maxVertexInputBindingStride
****
@ -362,13 +362,13 @@ include::../api/structs/VkVertexInputAttributeDescription.txt[]
.Valid Usage
****
* pname:location must: be less than
* [[VUID-VkVertexInputAttributeDescription-location-00620]] pname:location must: be less than
sname:VkPhysicalDeviceLimits::pname:maxVertexInputAttributes
* pname:binding must: be less than
* [[VUID-VkVertexInputAttributeDescription-binding-00621]] pname:binding must: be less than
sname:VkPhysicalDeviceLimits::pname:maxVertexInputBindings
* pname:offset must: be less than or equal to
* [[VUID-VkVertexInputAttributeDescription-offset-00622]] pname:offset must: be less than or equal to
sname:VkPhysicalDeviceLimits::pname:maxVertexInputAttributeOffset
* pname:format must: be allowed as a vertex buffer format, as specified by
* [[VUID-VkVertexInputAttributeDescription-format-00623]] pname:format must: be allowed as a vertex buffer format, as specified by
the ename:VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT flag in
sname:VkFormatProperties::pname:bufferFeatures returned by
fname:vkGetPhysicalDeviceFormatProperties
@ -403,15 +403,15 @@ commands.
.Valid Usage
****
* pname:firstBinding must: be less than
* [[VUID-vkCmdBindVertexBuffers-firstBinding-00624]] pname:firstBinding must: be less than
sname:VkPhysicalDeviceLimits::pname:maxVertexInputBindings
* The sum of pname:firstBinding and pname:bindingCount must: be less than
* [[VUID-vkCmdBindVertexBuffers-firstBinding-00625]] The sum of pname:firstBinding and pname:bindingCount must: be less than
or equal to sname:VkPhysicalDeviceLimits::pname:maxVertexInputBindings
* All elements of pname:pOffsets must: be less than the size of the
* [[VUID-vkCmdBindVertexBuffers-pOffsets-00626]] All elements of pname:pOffsets must: be less than the size of the
corresponding element in pname:pBuffers
* All elements of pname:pBuffers must: have been created with the
* [[VUID-vkCmdBindVertexBuffers-pBuffers-00627]] All elements of pname:pBuffers must: have been created with the
ename:VK_BUFFER_USAGE_VERTEX_BUFFER_BIT flag
* Each element of pname:pBuffers that is non-sparse must: be bound
* [[VUID-vkCmdBindVertexBuffers-pBuffers-00628]] Each element of pname:pBuffers that is non-sparse must: be bound
completely and contiguously to a single sname:VkDeviceMemory object
****

View File

@ -238,19 +238,14 @@ include::../api/structs/VkApplicationInfo.txt[]
application expects to run, encoded as described in the
<<fundamentals-versionnum,API Version Numbers and Semantics>> section.
If pname:apiVersion is 0 the implementation must: ignore it, otherwise
if the implementation does not support the requested pname:apiVersion it
if the implementation does not support the requested pname:apiVersion,
or an effective substitute for pname:apiVersion, it
must: return ename:VK_ERROR_INCOMPATIBLE_DRIVER.
The patch version number specified in pname:apiVersion is ignored when
creating an instance object.
Only the major and minor versions of the instance must: match those
requested in pname:apiVersion.
.Valid Usage
****
* pname:apiVersion must: be zero, or otherwise it must: be a version that
the implementation supports, or supports an effective substitute for
****
include::../validity/structs/VkApplicationInfo.txt[]
// refBegin vkDestroyInstance Destroy an instance of Vulkan
@ -265,11 +260,11 @@ include::../api/protos/vkDestroyInstance.txt[]
.Valid Usage
****
* All child objects created using pname:instance must: have been destroyed
* [[VUID-vkDestroyInstance-instance-00629]] All child objects created using pname:instance must: have been destroyed
prior to destroying pname:instance
* If sname:VkAllocationCallbacks were provided when pname:instance was
* [[VUID-vkDestroyInstance-instance-00630]] If sname:VkAllocationCallbacks were provided when pname:instance was
created, a compatible set of callbacks must: be provided here
* If no sname:VkAllocationCallbacks were provided when pname:instance was
* [[VUID-vkDestroyInstance-instance-00631]] If no sname:VkAllocationCallbacks were provided when pname:instance was
created, pname:pAllocator must: be `NULL`
****

View File

@ -57,13 +57,13 @@ include::../api/structs/VkAllocationCallbacks.txt[]
.Valid Usage
****
* pname:pfnAllocation must: be a pointer to a valid user-defined
* [[VUID-VkAllocationCallbacks-pfnAllocation-00632]] pname:pfnAllocation must: be a pointer to a valid user-defined
tlink:PFN_vkAllocationFunction
* pname:pfnReallocation must: be a pointer to a valid user-defined
* [[VUID-VkAllocationCallbacks-pfnReallocation-00633]] pname:pfnReallocation must: be a pointer to a valid user-defined
tlink:PFN_vkReallocationFunction
* pname:pfnFree must: be a pointer to a valid user-defined
* [[VUID-VkAllocationCallbacks-pfnFree-00634]] pname:pfnFree must: be a pointer to a valid user-defined
tlink:PFN_vkFreeFunction
* If either of pname:pfnInternalAllocation or pname:pfnInternalFree is not
* [[VUID-VkAllocationCallbacks-pfnInternalAllocation-00635]] If either of pname:pfnInternalAllocation or pname:pfnInternalFree is not
`NULL`, both must: be valid callbacks
****
@ -740,7 +740,7 @@ the error ename:VK_ERROR_OUT_OF_DEVICE_MEMORY should: be returned.
.Valid Usage
****
* The number of currently valid memory objects, allocated from
* [[VUID-vkAllocateMemory-device-00636]] The number of currently valid memory objects, allocated from
pname:device, must: be less than
sname:VkPhysicalDeviceLimits::pname:maxMemoryAllocationCount
****
@ -809,12 +809,12 @@ endif::VK_KHX_external_memory_win32,VK_KHX_external_memory_fd[]
.Valid Usage
****
* pname:allocationSize must: be less than or equal to the amount of memory
* [[VUID-VkMemoryAllocateInfo-allocationSize-00637]] pname:allocationSize must: be less than or equal to the amount of memory
available to the sname:VkMemoryHeap specified by pname:memoryTypeIndex
and the calling command's sname:VkDevice
* pname:allocationSize must: be greater than `0`
* [[VUID-VkMemoryAllocateInfo-allocationSize-00638]] pname:allocationSize must: be greater than `0`
ifdef::VK_KHX_external_memory+VK_NV_dedicated_allocation[]
* If the pname:pNext chain contains an instance of
* [[VUID-VkMemoryAllocateInfo-pNext-00639]] If the pname:pNext chain contains an instance of
sname:VkExportMemoryAllocateInfoKHX, and any of the handle types
specified in sname:VkExportMemoryAllocateInfoKHX::pname:handleTypes
require a dedicated allocation, as reported by
@ -828,39 +828,39 @@ ifdef::VK_KHX_external_memory+VK_NV_dedicated_allocation[]
ename:VK_NULL_HANDLE.
endif::VK_KHX_external_memory+VK_NV_dedicated_allocation[]
ifdef::VK_KHX_external_memory+VK_NV_external_memory[]
* If the pname:pNext chain contains an instance of
* [[VUID-VkMemoryAllocateInfo-pNext-00640]] If the pname:pNext chain contains an instance of
slink:VkExportMemoryAllocateInfoKHX, it must: not contain an instance of
slink:VkExportMemoryAllocateInfoNV or
slink:VkExportMemoryWin32HandleInfoNV.
endif::VK_KHX_external_memory+VK_NV_external_memory[]
ifdef::VK_KHX_external_memory_win32+VK_NV_external_memory_win32[]
* If the pname:pNext chain contains an instance of
* [[VUID-VkMemoryAllocateInfo-pNext-00641]] If the pname:pNext chain contains an instance of
slink:VkImportMemoryWin32HandleInfoKHX, it must: not contain an instance
of slink:VkImportMemoryWin32HandleInfoNV.
endif::VK_KHX_external_memory_win32+VK_NV_external_memory_win32[]
ifdef::VK_KHX_external_memory_win32,VK_KHX_external_memory_fd[]
* If the parameters define an import operation and the external handle
* [[VUID-VkMemoryAllocateInfo-allocationSize-00642]] If the parameters define an import operation and the external handle
specified was created by the Vulkan API, the values of
pname:allocationSize and pname:memoryTypeIndex must: match those
specified when the memory object being imported was created.
endif::VK_KHX_external_memory_win32,VK_KHX_external_memory_fd[]
ifdef::VK_KHX_external_memory+VK_KHX_device_group[]
* If the parameters define an import operation and the external handle
* [[VUID-VkMemoryAllocateInfo-None-00643]] If the parameters define an import operation and the external handle
specified was created by the Vulkan API, the device mask specified by
slink:VkMemoryAllocateFlagsInfoKHX must: match that specified when the
memory object being imported was allocated.
* If the parameters define an import operation and the external handle
* [[VUID-VkMemoryAllocateInfo-None-00644]] If the parameters define an import operation and the external handle
specified was created by the Vulkan API, the list of physical devices
that comprise the logical device passed to flink:vkAllocateMemory must:
match the list of physical devices that comprise the logical device on
which the memory was originally allocated.
endif::VK_KHX_external_memory+VK_KHX_device_group[]
ifdef::VK_KHX_external_memory_win32[]
* If the parameters define an import operation and the external handle is
* [[VUID-VkMemoryAllocateInfo-memoryTypeIndex-00645]] If the parameters define an import operation and the external handle is
an NT handle or a global share handle created outside of the Vulkan API,
the value of pname:memoryTypeIndex must: be one of those returned by
slink:vkGetMemoryWin32HandlePropertiesKHX.
* If the parameters define an import operation and the external handle
* [[VUID-VkMemoryAllocateInfo-allocationSize-00646]] If the parameters define an import operation and the external handle
type is ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT_KHX,
ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT_KHX, or
ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT_KHX,
@ -868,13 +868,13 @@ ifdef::VK_KHX_external_memory_win32[]
requirements of the pname:image or pname:buffer member of the instance
of sname:VkDedicatedAllocationMemoryAllocateInfoNV included in the
pname:pNext chain.
* If the parameters define an import operation and the external handle
* [[VUID-VkMemoryAllocateInfo-allocationSize-00647]] If the parameters define an import operation and the external handle
type is ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT_KHX,
pname:allocationSize must: match the size specified when creating the
Direct3D 12 heap from which the external handle was extracted.
endif::VK_KHX_external_memory_win32[]
ifdef::VK_KHX_external_memory_fd[]
* If the parameters define an import operation and the external handle is
* [[VUID-VkMemoryAllocateInfo-memoryTypeIndex-00648]] If the parameters define an import operation and the external handle is
a POSIX file descriptor created outside of the Vulkan API, the value of
pname:memoryTypeIndex must: be one of those returned by
slink:vkGetMemoryFdPropertiesKHX.
@ -905,29 +905,29 @@ include::../api/structs/VkDedicatedAllocationMemoryAllocateInfoNV.txt[]
.Valid Usage
****
* At least one of pname:image and pname:buffer must: be
* [[VUID-VkDedicatedAllocationMemoryAllocateInfoNV-image-00649]] At least one of pname:image and pname:buffer must: be
sname:VK_NULL_HANDLE
* If pname:image is not sname:VK_NULL_HANDLE, the image must: have been
* [[VUID-VkDedicatedAllocationMemoryAllocateInfoNV-image-00650]] If pname:image is not sname:VK_NULL_HANDLE, the image must: have been
created with
sname:VkDedicatedAllocationImageCreateInfoNV::pname:dedicatedAllocation
equal to ename:VK_TRUE
* If pname:buffer is not sname:VK_NULL_HANDLE, the buffer must: have been
* [[VUID-VkDedicatedAllocationMemoryAllocateInfoNV-buffer-00651]] If pname:buffer is not sname:VK_NULL_HANDLE, the buffer must: have been
created with
sname:VkDedicatedAllocationBufferCreateInfoNV::pname:dedicatedAllocation
equal to ename:VK_TRUE
* If pname:image is not sname:VK_NULL_HANDLE,
* [[VUID-VkDedicatedAllocationMemoryAllocateInfoNV-image-00652]] If pname:image is not sname:VK_NULL_HANDLE,
sname:VkMemoryAllocateInfo::pname:allocationSize must: equal the
sname:VkMemoryRequirements::pname:size of the image
* If pname:buffer is not sname:VK_NULL_HANDLE,
* [[VUID-VkDedicatedAllocationMemoryAllocateInfoNV-buffer-00653]] If pname:buffer is not sname:VK_NULL_HANDLE,
sname:VkMemoryAllocateInfo::pname:allocationSize must: equal the
sname:VkMemoryRequirements::pname:size of the buffer
ifdef::VK_KHX_external_memory_win32,VK_KHX_external_memory_fd[]
* If pname:image is not sname:VK_NULL_HANDLE and
* [[VUID-VkDedicatedAllocationMemoryAllocateInfoNV-image-00654]] If pname:image is not sname:VK_NULL_HANDLE and
slink:VkMemoryAllocateInfo defines a memory import operation, the memory
being imported must: also be a dedicated image allocation and
pname:image must: be identical to the image associated with the imported
memory.
* If pname:buffer is not sname:VK_NULL_HANDLE and
* [[VUID-VkDedicatedAllocationMemoryAllocateInfoNV-buffer-00655]] If pname:buffer is not sname:VK_NULL_HANDLE and
slink:VkMemoryAllocateInfo defines a memory import operation, the memory
being imported must: also be a dedicated buffer allocation and
pname:buffer must: be identical to the buffer associated with the
@ -963,7 +963,7 @@ include::../api/structs/VkExportMemoryAllocateInfoKHX.txt[]
.Valid Usage
****
* The bits in pname:handleTypes must: be supported and compatible, as
* [[VUID-VkExportMemoryAllocateInfoKHX-handleTypes-00656]] The bits in pname:handleTypes must: be supported and compatible, as
reported by slink:VkExternalImageFormatPropertiesKHX or
slink:VkExternalBufferPropertiesKHX.
****
@ -1019,7 +1019,7 @@ ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT_KHX
.Valid Usage
****
* If slink:VkExportMemoryAllocateInfoKHX::pname:handleTypes does not
* [[VUID-VkExportMemoryWin32HandleInfoKHX-handleTypes-00657]] If slink:VkExportMemoryAllocateInfoKHX::pname:handleTypes does not
include ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHX,
ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT_KHX,
ename:VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT_KHX, or
@ -1054,14 +1054,14 @@ longer needed.
.Valid Usage
****
* If pname:handleType is not `0`, it must: be supported for import, as
* [[VUID-VkImportMemoryWin32HandleInfoKHX-handleType-00658]] If pname:handleType is not `0`, it must: be supported for import, as
reported by slink:VkExternalImageFormatPropertiesKHX or
slink:VkExternalBufferPropertiesKHX.
* The memory from which pname:handle was exported must: have been created
* [[VUID-VkImportMemoryWin32HandleInfoKHX-handle-00659]] The memory from which pname:handle was exported must: have been created
on the same underlying physical device as pname:device.
* If pname:handleType is not `0`, it must: be defined as an NT handle or a
* [[VUID-VkImportMemoryWin32HandleInfoKHX-handleType-00660]] If pname:handleType is not `0`, it must: be defined as an NT handle or a
global share handle.
* If pname:handleType is not `0`, pname:handle must: be a valid handle of
* [[VUID-VkImportMemoryWin32HandleInfoKHX-handleType-00661]] If pname:handleType is not `0`, pname:handle must: be a valid handle of
the type specified by pname:handleType.
****
@ -1093,13 +1093,13 @@ using the fname:CloseHandle system call when they are no longer needed.
.Valid Usage
****
* pname:handleType must: have been included in
* [[VUID-vkGetMemoryWin32HandleKHX-handleType-00662]] pname:handleType must: have been included in
slink:VkExportMemoryAllocateInfoKHX::pname:handleTypes when pname:memory
was created.
* If pname:handleType is defined as an NT handle,
* [[VUID-vkGetMemoryWin32HandleKHX-handleType-00663]] If pname:handleType is defined as an NT handle,
flink:vkGetMemoryWin32HandleKHX must: be called no more than once for
each valid unique combination of pname:memory and pname:handleType.
* pname:handleType must: be defined as an NT handle or a global share
* [[VUID-vkGetMemoryWin32HandleKHX-handleType-00664]] pname:handleType must: be defined as an NT handle or a global share
handle.
****
@ -1122,9 +1122,9 @@ include::../api/protos/vkGetMemoryWin32HandlePropertiesKHX.txt[]
.Valid Usage
****
* pname:handle must: be an external memory handle created outside of the
* [[VUID-vkGetMemoryWin32HandlePropertiesKHX-handle-00665]] pname:handle must: be an external memory handle created outside of the
Vulkan API.
* pname:handleType must: not be one of the handle types defined as opaque.
* [[VUID-vkGetMemoryWin32HandlePropertiesKHX-handleType-00666]] pname:handleType must: not be one of the handle types defined as opaque.
****
include::../validity/protos/vkGetMemoryWin32HandlePropertiesKHX.txt[]
@ -1170,14 +1170,14 @@ after a successful import.
.Valid Usage
****
* If pname:handleType is not `0`, it must: be supported for import, as
* [[VUID-VkImportMemoryFdInfoKHX-handleType-00667]] If pname:handleType is not `0`, it must: be supported for import, as
reported by slink:VkExternalImageFormatPropertiesKHX or
slink:VkExternalBufferPropertiesKHX.
* The memory from which pname:fd was exported must: have been created on
* [[VUID-VkImportMemoryFdInfoKHX-fd-00668]] The memory from which pname:fd was exported must: have been created on
the same underlying physical device as pname:device.
* If pname:handleType is not `0`, it must: be defined as a POSIX file
* [[VUID-VkImportMemoryFdInfoKHX-handleType-00669]] If pname:handleType is not `0`, it must: be defined as a POSIX file
descriptor handle.
* If pname:handleType is not `0`, pname:fd must: be a valid handle of the
* [[VUID-VkImportMemoryFdInfoKHX-handleType-00670]] If pname:handleType is not `0`, pname:fd must: be a valid handle of the
type specified by pname:handleType.
****
@ -1210,10 +1210,10 @@ needed, or by importing a Vulkan memory object from it.
.Valid Usage
****
* pname:handleType must: have been included in
* [[VUID-vkGetMemoryFdKHX-handleType-00671]] pname:handleType must: have been included in
slink:VkExportMemoryAllocateInfoKHX::pname:handleTypes when pname:memory
was created.
* pname:handleType must: be defined as a POSIX file descriptor handle.
* [[VUID-vkGetMemoryFdKHX-handleType-00672]] pname:handleType must: be defined as a POSIX file descriptor handle.
****
include::../validity/protos/vkGetMemoryFdKHX.txt[]
@ -1235,9 +1235,9 @@ include::../api/protos/vkGetMemoryFdPropertiesKHX.txt[]
.Valid Usage
****
* pname:fd must: be an external memory handle created outside of the
* [[VUID-vkGetMemoryFdPropertiesKHX-fd-00673]] pname:fd must: be an external memory handle created outside of the
Vulkan API.
* pname:handleType must: not be one of the handle types defined as opaque.
* [[VUID-vkGetMemoryFdPropertiesKHX-handleType-00674]] pname:handleType must: not be one of the handle types defined as opaque.
****
include::../validity/protos/vkGetMemoryFdPropertiesKHX.txt[]
@ -1327,9 +1327,9 @@ allocations.
.Valid Usage
****
* If ename:VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT_KHX is set, pname:deviceMask
* [[VUID-VkMemoryAllocateFlagsInfoKHX-deviceMask-00675]] If ename:VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT_KHX is set, pname:deviceMask
must: be a valid device mask.
* If ename:VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT_KHX is set, pname:deviceMask
* [[VUID-VkMemoryAllocateFlagsInfoKHX-deviceMask-00676]] If ename:VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT_KHX is set, pname:deviceMask
must: not be zero
****
@ -1370,7 +1370,7 @@ unmapped.
.Valid Usage
****
* All submitted commands that refer to pname:memory (via images or
* [[VUID-vkFreeMemory-memory-00677]] All submitted commands that refer to pname:memory (via images or
buffers) must: have completed execution
****
@ -1455,16 +1455,16 @@ to maintaining memory access ordering.
.Valid Usage
****
* pname:memory must: not currently be mapped
* pname:offset must: be less than the size of pname:memory
* If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:size must: be
* [[VUID-vkMapMemory-memory-00678]] pname:memory must: not currently be mapped
* [[VUID-vkMapMemory-offset-00679]] pname:offset must: be less than the size of pname:memory
* [[VUID-vkMapMemory-size-00680]] If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:size must: be
greater than `0`
* If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:size must: be
* [[VUID-vkMapMemory-size-00681]] If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:size must: be
less than or equal to the size of the pname:memory minus pname:offset
* pname:memory must: have been created with a memory type that reports
* [[VUID-vkMapMemory-memory-00682]] pname:memory must: have been created with a memory type that reports
ename:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT
ifdef::VK_KHX_device_group[]
* pname:memory must: not have been allocated with multiple instances.
* [[VUID-vkMapMemory-memory-00683]] pname:memory must: not have been allocated with multiple instances.
endif::VK_KHX_device_group[]
****
@ -1562,15 +1562,15 @@ include::../api/structs/VkMappedMemoryRange.txt[]
.Valid Usage
****
* pname:memory must: currently be mapped
* If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:offset and
* [[VUID-VkMappedMemoryRange-memory-00684]] pname:memory must: currently be mapped
* [[VUID-VkMappedMemoryRange-size-00685]] If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:offset and
pname:size must: specify a range contained within the currently mapped
range of pname:memory
* If pname:size is equal to ename:VK_WHOLE_SIZE, pname:offset must: be
* [[VUID-VkMappedMemoryRange-size-00686]] If pname:size is equal to ename:VK_WHOLE_SIZE, pname:offset must: be
within the currently mapped range of pname:memory
* pname:offset must: be a multiple of
* [[VUID-VkMappedMemoryRange-offset-00687]] pname:offset must: be a multiple of
sname:VkPhysicalDeviceLimits::pname:nonCoherentAtomSize
* If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:size must: be a
* [[VUID-VkMappedMemoryRange-size-00688]] If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:size must: be a
multiple of sname:VkPhysicalDeviceLimits::pname:nonCoherentAtomSize
****
@ -1589,7 +1589,7 @@ include::../api/protos/vkUnmapMemory.txt[]
.Valid Usage
****
* pname:memory must: currently be mapped
* [[VUID-vkUnmapMemory-memory-00689]] pname:memory must: currently be mapped
****
include::../validity/protos/vkUnmapMemory.txt[]
@ -1639,7 +1639,7 @@ with.
.Valid Usage
****
* pname:memory must: have been created with a memory type that reports
* [[VUID-vkGetDeviceMemoryCommitment-memory-00690]] pname:memory must: have been created with a memory type that reports
ename:VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT
****
@ -1706,10 +1706,10 @@ but would scissor the rendering to only update local memory.
.Valid Usage
****
* pname:heapIndex must: be less than pname:memoryHeapCount
* pname:localDeviceIndex must: be a valid device index
* pname:remoteDeviceIndex must: be a valid device index
* pname:localDeviceIndex must: not equal remoteDeviceIndex
* [[VUID-vkGetDeviceGroupPeerMemoryFeaturesKHX-heapIndex-00691]] pname:heapIndex must: be less than pname:memoryHeapCount
* [[VUID-vkGetDeviceGroupPeerMemoryFeaturesKHX-localDeviceIndex-00692]] pname:localDeviceIndex must: be a valid device index
* [[VUID-vkGetDeviceGroupPeerMemoryFeaturesKHX-remoteDeviceIndex-00693]] pname:remoteDeviceIndex must: be a valid device index
* [[VUID-vkGetDeviceGroupPeerMemoryFeaturesKHX-localDeviceIndex-00694]] pname:localDeviceIndex must: not equal remoteDeviceIndex
****
include::../validity/protos/vkGetDeviceGroupPeerMemoryFeaturesKHX.txt[]

View File

@ -139,12 +139,12 @@ endif::editing-notes[]
.Valid Usage
****
* If the pname:flags member of any given element of pname:pCreateInfos
* [[VUID-vkCreateComputePipelines-flags-00695]] If the pname:flags member of any given element of pname:pCreateInfos
contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, and the
pname:basePipelineIndex member of that same element is not `-1`,
pname:basePipelineIndex must: be less than the index into
pname:pCreateInfos that corresponds to that element
* If the pname:flags member of any given element of pname:pCreateInfos
* [[VUID-vkCreateComputePipelines-flags-00696]] If the pname:flags member of any given element of pname:pCreateInfos
contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, the base
pipeline must: have been created with the
ename:VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT flag set
@ -179,26 +179,26 @@ sname:VkPipelineShaderStageCreateInfo.
.Valid Usage
****
* If pname:flags contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT
* [[VUID-VkComputePipelineCreateInfo-flags-00697]] If pname:flags contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT
flag, and pname:basePipelineIndex is -1, pname:basePipelineHandle must:
be a valid handle to a compute sname:VkPipeline
* If pname:flags contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT
* [[VUID-VkComputePipelineCreateInfo-flags-00698]] If pname:flags contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT
flag, and pname:basePipelineHandle is dlink:VK_NULL_HANDLE,
pname:basePipelineIndex must: be a valid index into the calling
command's pname:pCreateInfos parameter
* If pname:flags contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT
* [[VUID-VkComputePipelineCreateInfo-flags-00699]] If pname:flags contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT
flag, and pname:basePipelineIndex is not -1, pname:basePipelineHandle
must: be dlink:VK_NULL_HANDLE
* If pname:flags contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT
* [[VUID-VkComputePipelineCreateInfo-flags-00700]] If pname:flags contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT
flag, and pname:basePipelineHandle is not dlink:VK_NULL_HANDLE,
pname:basePipelineIndex must: be -1
* The pname:stage member of pname:stage must: be
* [[VUID-VkComputePipelineCreateInfo-stage-00701]] The pname:stage member of pname:stage must: be
ename:VK_SHADER_STAGE_COMPUTE_BIT
* The shader code for the entry point identified by pname:stage and the
* [[VUID-VkComputePipelineCreateInfo-stage-00702]] The shader code for the entry point identified by pname:stage and the
rest of the state identified by this structure must: adhere to the
pipeline linking rules described in the <<interfaces,Shader Interfaces>>
chapter
* pname:layout must: be
* [[VUID-VkComputePipelineCreateInfo-layout-00703]] pname:layout must: be
<<descriptorsets-pipelinelayout-consistency,consistent>> with the layout
of the compute shader specified in pname:stage
****
@ -231,63 +231,63 @@ include::../api/enums/VkShaderStageFlagBits.txt[]
.Valid Usage
****
* If the <<features-features-geometryShader,geometry shaders>> feature is
* [[VUID-VkPipelineShaderStageCreateInfo-stage-00704]] If the <<features-features-geometryShader,geometry shaders>> feature is
not enabled, pname:stage must: not be ename:VK_SHADER_STAGE_GEOMETRY_BIT
* If the <<features-features-tessellationShader,tessellation shaders>>
* [[VUID-VkPipelineShaderStageCreateInfo-stage-00705]] If the <<features-features-tessellationShader,tessellation shaders>>
feature is not enabled, pname:stage must: not be
ename:VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT or
ename:VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT
* pname:stage must: not be ename:VK_SHADER_STAGE_ALL_GRAPHICS, or
* [[VUID-VkPipelineShaderStageCreateInfo-stage-00706]] pname:stage must: not be ename:VK_SHADER_STAGE_ALL_GRAPHICS, or
ename:VK_SHADER_STAGE_ALL
* pname:pName must: be the name of an code:OpEntryPoint in pname:module
* [[VUID-VkPipelineShaderStageCreateInfo-pName-00707]] pname:pName must: be the name of an code:OpEntryPoint in pname:module
with an execution model that matches pname:stage
* If the identified entry point includes any variable in its interface
* [[VUID-VkPipelineShaderStageCreateInfo-maxClipDistances-00708]] If the identified entry point includes any variable in its interface
that is declared with the code:ClipDistance code:BuiltIn decoration,
that variable must: not have an array size greater than
sname:VkPhysicalDeviceLimits::pname:maxClipDistances
* If the identified entry point includes any variable in its interface
* [[VUID-VkPipelineShaderStageCreateInfo-maxCullDistances-00709]] If the identified entry point includes any variable in its interface
that is declared with the code:CullDistance code:BuiltIn decoration,
that variable must: not have an array size greater than
sname:VkPhysicalDeviceLimits::pname:maxCullDistances
* If the identified entry point includes any variables in its interface
* [[VUID-VkPipelineShaderStageCreateInfo-maxCombinedClipAndCullDistances-00710]] If the identified entry point includes any variables in its interface
that are declared with the code:ClipDistance or code:CullDistance
code:BuiltIn decoration, those variables must: not have array sizes
which sum to more than
sname:VkPhysicalDeviceLimits::pname:maxCombinedClipAndCullDistances
* If the identified entry point includes any variable in its interface
* [[VUID-VkPipelineShaderStageCreateInfo-maxSampleMaskWords-00711]] If the identified entry point includes any variable in its interface
that is declared with the code:SampleMask code:BuiltIn decoration, that
variable must: not have an array size greater than
sname:VkPhysicalDeviceLimits::pname:maxSampleMaskWords
* If pname:stage is ename:VK_SHADER_STAGE_VERTEX_BIT, the identified entry
* [[VUID-VkPipelineShaderStageCreateInfo-stage-00712]] If pname:stage is ename:VK_SHADER_STAGE_VERTEX_BIT, the identified entry
point must: not include any input variable in its interface that is
decorated with code:CullDistance
* If pname:stage is ename:VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT or
* [[VUID-VkPipelineShaderStageCreateInfo-stage-00713]] If pname:stage is ename:VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT or
ename:VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, and the identified
entry point has an code:OpExecutionMode instruction that specifies a
patch size with code:OutputVertices, the patch size must: be greater
than `0` and less than or equal to
sname:VkPhysicalDeviceLimits::pname:maxTessellationPatchSize
* If pname:stage is ename:VK_SHADER_STAGE_GEOMETRY_BIT, the identified
* [[VUID-VkPipelineShaderStageCreateInfo-stage-00714]] If pname:stage is ename:VK_SHADER_STAGE_GEOMETRY_BIT, the identified
entry point must: have an code:OpExecutionMode instruction that
specifies a maximum output vertex count that is greater than `0` and
less than or equal to
sname:VkPhysicalDeviceLimits::pname:maxGeometryOutputVertices
* If pname:stage is ename:VK_SHADER_STAGE_GEOMETRY_BIT, the identified
* [[VUID-VkPipelineShaderStageCreateInfo-stage-00715]] If pname:stage is ename:VK_SHADER_STAGE_GEOMETRY_BIT, the identified
entry point must: have an code:OpExecutionMode instruction that
specifies an invocation count that is greater than `0` and less than or
equal to
sname:VkPhysicalDeviceLimits::pname:maxGeometryShaderInvocations
* If pname:stage is ename:VK_SHADER_STAGE_GEOMETRY_BIT, and the identified
* [[VUID-VkPipelineShaderStageCreateInfo-stage-00716]] If pname:stage is ename:VK_SHADER_STAGE_GEOMETRY_BIT, and the identified
entry point writes to code:Layer for any primitive, it must: write the
same value to code:Layer for all vertices of a given primitive
* If pname:stage is ename:VK_SHADER_STAGE_GEOMETRY_BIT, and the identified
* [[VUID-VkPipelineShaderStageCreateInfo-stage-00717]] If pname:stage is ename:VK_SHADER_STAGE_GEOMETRY_BIT, and the identified
entry point writes to code:ViewportIndex for any primitive, it must:
write the same value to code:ViewportIndex for all vertices of a given
primitive
* If pname:stage is ename:VK_SHADER_STAGE_FRAGMENT_BIT, the identified
* [[VUID-VkPipelineShaderStageCreateInfo-stage-00718]] If pname:stage is ename:VK_SHADER_STAGE_FRAGMENT_BIT, the identified
entry point must: not include any output variables in its interface
decorated with code:CullDistance
* If pname:stage is ename:VK_SHADER_STAGE_FRAGMENT_BIT, and the identified
* [[VUID-VkPipelineShaderStageCreateInfo-stage-00719]] If pname:stage is ename:VK_SHADER_STAGE_FRAGMENT_BIT, and the identified
entry point writes to code:FragDepth in any execution path, it must:
write to code:FragDepth in all execution paths
****
@ -328,12 +328,12 @@ pipeline layout.
.Valid Usage
****
* If the pname:flags member of any given element of pname:pCreateInfos
* [[VUID-vkCreateGraphicsPipelines-flags-00720]] If the pname:flags member of any given element of pname:pCreateInfos
contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, and the
pname:basePipelineIndex member of that same element is not `-1`,
pname:basePipelineIndex must: be less than the index into
pname:pCreateInfos that corresponds to that element
* If the pname:flags member of any given element of pname:pCreateInfos
* [[VUID-vkCreateGraphicsPipelines-flags-00721]] If the pname:flags member of any given element of pname:pCreateInfos
contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, the base
pipeline must: have been created with the
ename:VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT flag set
@ -453,88 +453,88 @@ endif::VK_NV_glsl_shader[]
.Valid Usage
****
* If pname:flags contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT
* [[VUID-VkGraphicsPipelineCreateInfo-flags-00722]] If pname:flags contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT
flag, and pname:basePipelineIndex is -1, pname:basePipelineHandle must:
be a valid handle to a graphics sname:VkPipeline
* If pname:flags contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT
* [[VUID-VkGraphicsPipelineCreateInfo-flags-00723]] If pname:flags contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT
flag, and pname:basePipelineHandle is dlink:VK_NULL_HANDLE,
pname:basePipelineIndex must: be a valid index into the calling
command's pname:pCreateInfos parameter
* If pname:flags contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT
* [[VUID-VkGraphicsPipelineCreateInfo-flags-00724]] If pname:flags contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT
flag, and pname:basePipelineIndex is not -1, pname:basePipelineHandle
must: be dlink:VK_NULL_HANDLE
* If pname:flags contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT
* [[VUID-VkGraphicsPipelineCreateInfo-flags-00725]] If pname:flags contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT
flag, and pname:basePipelineHandle is not dlink:VK_NULL_HANDLE,
pname:basePipelineIndex must: be -1
* The pname:stage member of each element of pname:pStages must: be unique
* The pname:stage member of one element of pname:pStages must: be
* [[VUID-VkGraphicsPipelineCreateInfo-stage-00726]] The pname:stage member of each element of pname:pStages must: be unique
* [[VUID-VkGraphicsPipelineCreateInfo-stage-00727]] The pname:stage member of one element of pname:pStages must: be
ename:VK_SHADER_STAGE_VERTEX_BIT
* The pname:stage member of any given element of pname:pStages must: not
* [[VUID-VkGraphicsPipelineCreateInfo-stage-00728]] The pname:stage member of any given element of pname:pStages must: not
be ename:VK_SHADER_STAGE_COMPUTE_BIT
* If pname:pStages includes a tessellation control shader stage, it must:
* [[VUID-VkGraphicsPipelineCreateInfo-pStages-00729]] If pname:pStages includes a tessellation control shader stage, it must:
include a tessellation evaluation shader stage
* If pname:pStages includes a tessellation evaluation shader stage, it
* [[VUID-VkGraphicsPipelineCreateInfo-pStages-00730]] If pname:pStages includes a tessellation evaluation shader stage, it
must: include a tessellation control shader stage
* If pname:pStages includes a tessellation control shader stage and a
* [[VUID-VkGraphicsPipelineCreateInfo-pStages-00731]] If pname:pStages includes a tessellation control shader stage and a
tessellation evaluation shader stage, pname:pTessellationState must: be
a pointer to a valid sname:VkPipelineTessellationStateCreateInfo
structure
* If pname:pStages includes tessellation shader stages, the shader code of
* [[VUID-VkGraphicsPipelineCreateInfo-pStages-00732]] If pname:pStages includes tessellation shader stages, the shader code of
at least one stage must: contain an code:OpExecutionMode instruction
that specifies the type of subdivision in the pipeline
* If pname:pStages includes tessellation shader stages, and the shader
* [[VUID-VkGraphicsPipelineCreateInfo-pStages-00733]] If pname:pStages includes tessellation shader stages, and the shader
code of both stages contain an code:OpExecutionMode instruction that
specifies the type of subdivision in the pipeline, they must: both
specify the same subdivision mode
* If pname:pStages includes tessellation shader stages, the shader code of
* [[VUID-VkGraphicsPipelineCreateInfo-pStages-00734]] If pname:pStages includes tessellation shader stages, the shader code of
at least one stage must: contain an code:OpExecutionMode instruction
that specifies the output patch size in the pipeline
* If pname:pStages includes tessellation shader stages, and the shader
* [[VUID-VkGraphicsPipelineCreateInfo-pStages-00735]] If pname:pStages includes tessellation shader stages, and the shader
code of both contain an code:OpExecutionMode instruction that specifies
the out patch size in the pipeline, they must: both specify the same
patch size
* If pname:pStages includes tessellation shader stages, the pname:topology
* [[VUID-VkGraphicsPipelineCreateInfo-pStages-00736]] If pname:pStages includes tessellation shader stages, the pname:topology
member of pname:pInputAssembly must: be
ename:VK_PRIMITIVE_TOPOLOGY_PATCH_LIST
* If the pname:topology member of pname:pInputAssembly is
* [[VUID-VkGraphicsPipelineCreateInfo-topology-00737]] If the pname:topology member of pname:pInputAssembly is
ename:VK_PRIMITIVE_TOPOLOGY_PATCH_LIST, pname:pStages must: include
tessellation shader stages
* If pname:pStages includes a geometry shader stage, and does not include
* [[VUID-VkGraphicsPipelineCreateInfo-pStages-00738]] If pname:pStages includes a geometry shader stage, and does not include
any tessellation shader stages, its shader code must: contain an
code:OpExecutionMode instruction that specifies an input primitive type
that is <<shaders-geometry-execution, compatible>> with the primitive
topology specified in pname:pInputAssembly
* If pname:pStages includes a geometry shader stage, and also includes
* [[VUID-VkGraphicsPipelineCreateInfo-pStages-00739]] If pname:pStages includes a geometry shader stage, and also includes
tessellation shader stages, its shader code must: contain an
code:OpExecutionMode instruction that specifies an input primitive type
that is <<shaders-geometry-execution, compatible>> with the primitive
topology that is output by the tessellation stages
* If pname:pStages includes a fragment shader stage and a geometry shader
* [[VUID-VkGraphicsPipelineCreateInfo-pStages-00740]] If pname:pStages includes a fragment shader stage and a geometry shader
stage, and the fragment shader code reads from an input variable that is
decorated with code:PrimitiveID, then the geometry shader code must:
write to a matching output variable, decorated with code:PrimitiveID, in
all execution paths
* If pname:pStages includes a fragment shader stage, its shader code must:
* [[VUID-VkGraphicsPipelineCreateInfo-pStages-00741]] If pname:pStages includes a fragment shader stage, its shader code must:
not read from any input attachment that is defined as
ename:VK_ATTACHMENT_UNUSED in pname:subpass
* The shader code for the entry points identified by pname:pStages, and
* [[VUID-VkGraphicsPipelineCreateInfo-pStages-00742]] The shader code for the entry points identified by pname:pStages, and
the rest of the state identified by this structure must: adhere to the
pipeline linking rules described in the <<interfaces,Shader Interfaces>>
chapter
* If rasterization is not disabled and pname:subpass uses a depth/stencil
* [[VUID-VkGraphicsPipelineCreateInfo-subpass-00743]] If rasterization is not disabled and pname:subpass uses a depth/stencil
attachment in pname:renderpass that has a layout of
ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL in the
sname:VkAttachmentReference defined by pname:subpass, the
pname:depthWriteEnable member of pname:pDepthStencilState must: be
ename:VK_FALSE
* If rasterization is not disabled and pname:subpass uses a depth/stencil
* [[VUID-VkGraphicsPipelineCreateInfo-subpass-00744]] If rasterization is not disabled and pname:subpass uses a depth/stencil
attachment in pname:renderpass that has a layout of
ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL in the
sname:VkAttachmentReference defined by pname:subpass, the pname:failOp,
pname:passOp and pname:depthFailOp members of each of the pname:front
and pname:back members of pname:pDepthStencilState must: be
ename:VK_STENCIL_OP_KEEP
* If rasterization is not disabled and the subpass uses color attachments,
* [[VUID-VkGraphicsPipelineCreateInfo-blendEnable-00745]] If rasterization is not disabled and the subpass uses color attachments,
then for each color attachment in the subpass the pname:blendEnable
member of the corresponding element of the pname:pAttachment member of
pname:pColorBlendState must: be ename:VK_FALSE if the pname:format of
@ -543,73 +543,73 @@ endif::VK_NV_glsl_shader[]
sname:VkFormatProperties::pname:linearTilingFeatures or
sname:VkFormatProperties::pname:optimalTilingFeatures returned by
fname:vkGetPhysicalDeviceFormatProperties
* If rasterization is not disabled and the subpass uses color attachments,
* [[VUID-VkGraphicsPipelineCreateInfo-attachmentCount-00746]] If rasterization is not disabled and the subpass uses color attachments,
the pname:attachmentCount member of pname:pColorBlendState must: be
equal to the pname:colorAttachmentCount used to create pname:subpass
* If no element of the pname:pDynamicStates member of pname:pDynamicState
* [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-00747]] If no element of the pname:pDynamicStates member of pname:pDynamicState
is ename:VK_DYNAMIC_STATE_VIEWPORT, the pname:pViewports member of
pname:pViewportState must: be a pointer to an array of
pname:pViewportState::pname:viewportCount sname:VkViewport structures
* If no element of the pname:pDynamicStates member of pname:pDynamicState
* [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-00748]] If no element of the pname:pDynamicStates member of pname:pDynamicState
is ename:VK_DYNAMIC_STATE_SCISSOR, the pname:pScissors member of
pname:pViewportState must: be a pointer to an array of
pname:pViewportState::pname:scissorCount sname:VkRect2D structures
* If the wide lines feature is not enabled, and no element of the
* [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-00749]] If the wide lines feature is not enabled, and no element of the
pname:pDynamicStates member of pname:pDynamicState is
ename:VK_DYNAMIC_STATE_LINE_WIDTH, the pname:lineWidth member of
pname:pRasterizationState must: be `1.0`
* If the pname:rasterizerDiscardEnable member of pname:pRasterizationState
* [[VUID-VkGraphicsPipelineCreateInfo-rasterizerDiscardEnable-00750]] If the pname:rasterizerDiscardEnable member of pname:pRasterizationState
is ename:VK_FALSE, pname:pViewportState must: be a pointer to a valid
sname:VkPipelineViewportStateCreateInfo structure
* If the pname:rasterizerDiscardEnable member of pname:pRasterizationState
* [[VUID-VkGraphicsPipelineCreateInfo-rasterizerDiscardEnable-00751]] If the pname:rasterizerDiscardEnable member of pname:pRasterizationState
is ename:VK_FALSE, pname:pMultisampleState must: be a pointer to a valid
sname:VkPipelineMultisampleStateCreateInfo structure
* If the pname:rasterizerDiscardEnable member of pname:pRasterizationState
* [[VUID-VkGraphicsPipelineCreateInfo-rasterizerDiscardEnable-00752]] If the pname:rasterizerDiscardEnable member of pname:pRasterizationState
is ename:VK_FALSE, and pname:subpass uses a depth/stencil attachment,
pname:pDepthStencilState must: be a pointer to a valid
sname:VkPipelineDepthStencilStateCreateInfo structure
* If the pname:rasterizerDiscardEnable member of pname:pRasterizationState
* [[VUID-VkGraphicsPipelineCreateInfo-rasterizerDiscardEnable-00753]] If the pname:rasterizerDiscardEnable member of pname:pRasterizationState
is ename:VK_FALSE, and pname:subpass uses color attachments,
pname:pColorBlendState must: be a pointer to a valid
sname:VkPipelineColorBlendStateCreateInfo structure
* If the depth bias clamping feature is not enabled, no element of the
* [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-00754]] If the depth bias clamping feature is not enabled, no element of the
pname:pDynamicStates member of pname:pDynamicState is
ename:VK_DYNAMIC_STATE_DEPTH_BIAS, and the pname:depthBiasEnable member
of pname:pDepthStencil is ename:VK_TRUE, the pname:depthBiasClamp member
of pname:pDepthStencil must: be `0.0`
* If no element of the pname:pDynamicStates member of pname:pDynamicState
* [[VUID-VkGraphicsPipelineCreateInfo-pDynamicStates-00755]] If no element of the pname:pDynamicStates member of pname:pDynamicState
is ename:VK_DYNAMIC_STATE_DEPTH_BOUNDS, and the
pname:depthBoundsTestEnable member of pname:pDepthStencil is
ename:VK_TRUE, the pname:minDepthBounds and pname:maxDepthBounds members
of pname:pDepthStencil must: be between `0.0` and `1.0`, inclusive
* pname:layout must: be
* [[VUID-VkGraphicsPipelineCreateInfo-layout-00756]] pname:layout must: be
<<descriptorsets-pipelinelayout-consistency,consistent>> with all
shaders specified in pname:pStages
* If pname:subpass uses color and/or depth/stencil attachments, then the
* [[VUID-VkGraphicsPipelineCreateInfo-subpass-00757]] If pname:subpass uses color and/or depth/stencil attachments, then the
pname:rasterizationSamples member of pname:pMultisampleState must: be
the same as the sample count for those subpass attachments
* If pname:subpass does not use any color and/or depth/stencil
* [[VUID-VkGraphicsPipelineCreateInfo-subpass-00758]] If pname:subpass does not use any color and/or depth/stencil
attachments, then the pname:rasterizationSamples member of
pname:pMultisampleState must: follow the rules for a
<<renderpass-noattachments, zero-attachment subpass>>
* pname:subpass must: be a valid subpass within pname:renderpass
* [[VUID-VkGraphicsPipelineCreateInfo-subpass-00759]] pname:subpass must: be a valid subpass within pname:renderpass
ifdef::VK_KHX_multiview[]
* If the pname:renderPass has multiview enabled and pname:subpass has more
* [[VUID-VkGraphicsPipelineCreateInfo-renderPass-00760]] If the pname:renderPass has multiview enabled and pname:subpass has more
than one bit set in the view mask and pname:multiviewTessellationShader
is not enabled, then pname:pStages must: not include tessellation
shaders.
* If the pname:renderPass has multiview enabled and pname:subpass has more
* [[VUID-VkGraphicsPipelineCreateInfo-renderPass-00761]] If the pname:renderPass has multiview enabled and pname:subpass has more
than one bit set in the view mask and pname:multiviewGeometryShader is
not enabled, then pname:pStages must: not include a geometry shader.
* If the pname:renderPass has multiview enabled and pname:subpass has more
* [[VUID-VkGraphicsPipelineCreateInfo-renderPass-00762]] If the pname:renderPass has multiview enabled and pname:subpass has more
than one bit set in the view mask, shaders in the pipeline must: not
write to the code:Layer built-in output
* If the pname:renderPass has multiview enabled, then all shaders must:
* [[VUID-VkGraphicsPipelineCreateInfo-renderPass-00763]] If the pname:renderPass has multiview enabled, then all shaders must:
not include variables decorated with the code:Layer built-in decoration
in their interfaces.
endif::VK_KHX_multiview[]
ifdef::VK_KHX_device_group[]
* pname:flags must: not contain the
* [[VUID-VkGraphicsPipelineCreateInfo-flags-00764]] pname:flags must: not contain the
ename:VK_PIPELINE_CREATE_DISPATCH_BASE_KHX flag.
endif::VK_KHX_device_group[]
****
@ -801,11 +801,11 @@ include::../api/protos/vkDestroyPipeline.txt[]
.Valid Usage
****
* All submitted commands that refer to pname:pipeline must: have completed
* [[VUID-vkDestroyPipeline-pipeline-00765]] All submitted commands that refer to pname:pipeline must: have completed
execution
* If sname:VkAllocationCallbacks were provided when pname:pipeline was
* [[VUID-vkDestroyPipeline-pipeline-00766]] If sname:VkAllocationCallbacks were provided when pname:pipeline was
created, a compatible set of callbacks must: be provided here
* If no sname:VkAllocationCallbacks were provided when pname:pipeline was
* [[VUID-vkDestroyPipeline-pipeline-00767]] If no sname:VkAllocationCallbacks were provided when pname:pipeline was
created, pname:pAllocator must: be `NULL`
****
@ -951,10 +951,10 @@ include::../api/structs/VkPipelineCacheCreateInfo.txt[]
.Valid Usage
****
* If pname:initialDataSize is not `0`, it must: be equal to the size of
* [[VUID-VkPipelineCacheCreateInfo-initialDataSize-00768]] If pname:initialDataSize is not `0`, it must: be equal to the size of
pname:pInitialData, as returned by fname:vkGetPipelineCacheData when
pname:pInitialData was originally retrieved
* If pname:initialDataSize is not `0`, pname:pInitialData must: have been
* [[VUID-VkPipelineCacheCreateInfo-initialDataSize-00769]] If pname:initialDataSize is not `0`, pname:pInitialData must: have been
retrieved from a previous call to fname:vkGetPipelineCacheData
****
@ -984,7 +984,7 @@ prune duplicate entries.
.Valid Usage
****
* pname:dstCache must: not appear in the list of source caches
* [[VUID-vkMergePipelineCaches-dstCache-00770]] pname:dstCache must: not appear in the list of source caches
****
include::../validity/protos/vkMergePipelineCaches.txt[]
@ -1090,9 +1090,9 @@ include::../api/protos/vkDestroyPipelineCache.txt[]
.Valid Usage
****
* If sname:VkAllocationCallbacks were provided when pname:pipelineCache
* [[VUID-vkDestroyPipelineCache-pipelineCache-00771]] If sname:VkAllocationCallbacks were provided when pname:pipelineCache
was created, a compatible set of callbacks must: be provided here
* If no sname:VkAllocationCallbacks were provided when pname:pipelineCache
* [[VUID-vkDestroyPipelineCache-pipelineCache-00772]] If no sname:VkAllocationCallbacks were provided when pname:pipelineCache
was created, pname:pAllocator must: be `NULL`
****
@ -1139,11 +1139,11 @@ slink:VkSpecializationMapEntry.
.Valid Usage
****
* The pname:offset member of any given element of pname:pMapEntries must:
* [[VUID-VkSpecializationInfo-offset-00773]] The pname:offset member of any given element of pname:pMapEntries must:
be less than pname:dataSize
* For any given element of pname:pMapEntries, pname:size must: be less
* [[VUID-VkSpecializationInfo-pMapEntries-00774]] For any given element of pname:pMapEntries, pname:size must: be less
than or equal to pname:dataSize minus pname:offset
* If pname:mapEntryCount is not `0`, pname:pMapEntries must: be a pointer
* [[VUID-VkSpecializationInfo-mapEntryCount-00775]] If pname:mapEntryCount is not `0`, pname:pMapEntries must: be a pointer
to an array of pname:mapEntryCount valid sname:VkSpecializationMapEntry
structures
****
@ -1167,7 +1167,7 @@ shader, that map entry does not affect the behavior of the pipeline.
.Valid Usage
****
* For a pname:constantID specialization constant declared in a shader,
* [[VUID-VkSpecializationMapEntry-constantID-00776]] For a pname:constantID specialization constant declared in a shader,
pname:size must: match the byte size of the pname:constantID.
If the specialization constant is of type code:boolean, pname:size must:
be the byte size of basetype:VkBool32
@ -1337,17 +1337,17 @@ No other commands are affected by the pipeline state.
.Valid Usage
****
* If pname:pipelineBindPoint is ename:VK_PIPELINE_BIND_POINT_COMPUTE, the
* [[VUID-vkCmdBindPipeline-pipelineBindPoint-00777]] If pname:pipelineBindPoint is ename:VK_PIPELINE_BIND_POINT_COMPUTE, the
sname:VkCommandPool that pname:commandBuffer was allocated from must:
support compute operations
* If pname:pipelineBindPoint is ename:VK_PIPELINE_BIND_POINT_GRAPHICS, the
* [[VUID-vkCmdBindPipeline-pipelineBindPoint-00778]] If pname:pipelineBindPoint is ename:VK_PIPELINE_BIND_POINT_GRAPHICS, the
sname:VkCommandPool that pname:commandBuffer was allocated from must:
support graphics operations
* If pname:pipelineBindPoint is ename:VK_PIPELINE_BIND_POINT_COMPUTE,
* [[VUID-vkCmdBindPipeline-pipelineBindPoint-00779]] If pname:pipelineBindPoint is ename:VK_PIPELINE_BIND_POINT_COMPUTE,
pname:pipeline must: be a compute pipeline
* If pname:pipelineBindPoint is ename:VK_PIPELINE_BIND_POINT_GRAPHICS,
* [[VUID-vkCmdBindPipeline-pipelineBindPoint-00780]] If pname:pipelineBindPoint is ename:VK_PIPELINE_BIND_POINT_GRAPHICS,
pname:pipeline must: be a graphics pipeline
* If the <<features-features-variableMultisampleRate,variable multisample
* [[VUID-vkCmdBindPipeline-pipeline-00781]] If the <<features-features-variableMultisampleRate,variable multisample
rate>> feature is not supported, pname:pipeline is a graphics pipeline,
the current subpass has no attachments, and this is not the first call
to this function with a graphics pipeline after transitioning to the

View File

@ -81,9 +81,9 @@ endif::VK_AMD_rasterization_order[]
.Valid Usage
****
* If the <<features-features-depthClamp,depth clamping>> feature is not
* [[VUID-VkPipelineRasterizationStateCreateInfo-depthClampEnable-00782]] If the <<features-features-depthClamp,depth clamping>> feature is not
enabled, pname:depthClampEnable must: be ename:VK_FALSE
* If the <<features-features-fillModeNonSolid,non-solid fill modes>>
* [[VUID-VkPipelineRasterizationStateCreateInfo-polygonMode-00783]] If the <<features-features-fillModeNonSolid,non-solid fill modes>>
feature is not enabled, pname:polygonMode must: be
ename:VK_POLYGON_MODE_FILL
****
@ -119,12 +119,12 @@ include::../api/structs/VkPipelineMultisampleStateCreateInfo.txt[]
.Valid Usage
****
* If the <<features-features-sampleRateShading,sample rate shading>>
* [[VUID-VkPipelineMultisampleStateCreateInfo-sampleShadingEnable-00784]] If the <<features-features-sampleRateShading,sample rate shading>>
feature is not enabled, pname:sampleShadingEnable must: be
ename:VK_FALSE
* If the <<features-features-alphaToOne,alpha to one>> feature is not
* [[VUID-VkPipelineMultisampleStateCreateInfo-alphaToOneEnable-00785]] If the <<features-features-alphaToOne,alpha to one>> feature is not
enabled, pname:alphaToOneEnable must: be ename:VK_FALSE
* pname:minSampleShading must: be in the range [eq]#[0,1]#
* [[VUID-VkPipelineMultisampleStateCreateInfo-minSampleShading-00786]] pname:minSampleShading must: be in the range [eq]#[0,1]#
****
include::../validity/structs/VkPipelineMultisampleStateCreateInfo.txt[]
@ -445,9 +445,9 @@ include::../api/protos/vkCmdSetLineWidth.txt[]
.Valid Usage
****
* The currently bound graphics pipeline must: have been created with the
* [[VUID-vkCmdSetLineWidth-None-00787]] The currently bound graphics pipeline must: have been created with the
ename:VK_DYNAMIC_STATE_LINE_WIDTH dynamic state enabled
* If the <<features-features-wideLines,wide lines>> feature is not
* [[VUID-vkCmdSetLineWidth-lineWidth-00788]] If the <<features-features-wideLines,wide lines>> feature is not
enabled, pname:lineWidth must: be `1.0`
****
@ -893,9 +893,9 @@ floating-point representation.
.Valid Usage
****
* The currently bound graphics pipeline must: have been created with the
* [[VUID-vkCmdSetDepthBias-None-00789]] The currently bound graphics pipeline must: have been created with the
ename:VK_DYNAMIC_STATE_DEPTH_BIAS dynamic state enabled
* If the <<features-features-depthBiasClamp,depth bias clamping>> feature
* [[VUID-vkCmdSetDepthBias-depthBiasClamp-00790]] If the <<features-features-depthBiasClamp,depth bias clamping>> feature
is not enabled, pname:depthBiasClamp must: be code:0.0
****

View File

@ -83,10 +83,10 @@ endif::editing-notes[]
.Valid Usage
****
* If the <<features-features-pipelineStatisticsQuery,pipeline statistics
* [[VUID-VkQueryPoolCreateInfo-queryType-00791]] If the <<features-features-pipelineStatisticsQuery,pipeline statistics
queries>> feature is not enabled, pname:queryType must: not be
ename:VK_QUERY_TYPE_PIPELINE_STATISTICS
* If pname:queryType is ename:VK_QUERY_TYPE_PIPELINE_STATISTICS,
* [[VUID-VkQueryPoolCreateInfo-queryType-00792]] If pname:queryType is ename:VK_QUERY_TYPE_PIPELINE_STATISTICS,
pname:pipelineStatistics must: be a valid combination of
elink:VkQueryPipelineStatisticFlagBits values
****
@ -106,11 +106,11 @@ include::../api/protos/vkDestroyQueryPool.txt[]
.Valid Usage
****
* All submitted commands that refer to pname:queryPool must: have
* [[VUID-vkDestroyQueryPool-queryPool-00793]] All submitted commands that refer to pname:queryPool must: have
completed execution
* If sname:VkAllocationCallbacks were provided when pname:queryPool was
* [[VUID-vkDestroyQueryPool-queryPool-00794]] If sname:VkAllocationCallbacks were provided when pname:queryPool was
created, a compatible set of callbacks must: be provided here
* If no sname:VkAllocationCallbacks were provided when pname:queryPool was
* [[VUID-vkDestroyQueryPool-queryPool-00795]] If no sname:VkAllocationCallbacks were provided when pname:queryPool was
created, pname:pAllocator must: be `NULL`
****
@ -184,9 +184,9 @@ unavailable.
.Valid Usage
****
* pname:firstQuery must: be less than the number of queries in
* [[VUID-vkCmdResetQueryPool-firstQuery-00796]] pname:firstQuery must: be less than the number of queries in
pname:queryPool
* The sum of pname:firstQuery and pname:queryCount must: be less than or
* [[VUID-vkCmdResetQueryPool-firstQuery-00797]] The sum of pname:firstQuery and pname:queryCount must: be less than or
equal to the number of queries in pname:queryPool
****
@ -269,36 +269,36 @@ are executed are considered active for those secondary command buffers.
.Valid Usage
****
* The query identified by pname:queryPool and pname:query must: currently
* [[VUID-vkCmdBeginQuery-queryPool-00798]] The query identified by pname:queryPool and pname:query must: currently
not be <<queries-operation-active,active>>
* The query identified by pname:queryPool and pname:query must: be
* [[VUID-vkCmdBeginQuery-queryPool-00799]] The query identified by pname:queryPool and pname:query must: be
unavailable
* If the <<features-features-occlusionQueryPrecise,precise occlusion
* [[VUID-vkCmdBeginQuery-queryType-00800]] If the <<features-features-occlusionQueryPrecise,precise occlusion
queries>> feature is not enabled, or the pname:queryType used to create
pname:queryPool was not ename:VK_QUERY_TYPE_OCCLUSION, pname:flags must:
not contain ename:VK_QUERY_CONTROL_PRECISE_BIT
* pname:queryPool must: have been created with a pname:queryType that
* [[VUID-vkCmdBeginQuery-queryPool-00801]] pname:queryPool must: have been created with a pname:queryType that
differs from that of any other queries that have been made
<<queries-operation-active,active>>, and are currently still active
within pname:commandBuffer
* pname:query must: be less than the number of queries in pname:queryPool
* If the pname:queryType used to create pname:queryPool was
* [[VUID-vkCmdBeginQuery-query-00802]] pname:query must: be less than the number of queries in pname:queryPool
* [[VUID-vkCmdBeginQuery-queryType-00803]] If the pname:queryType used to create pname:queryPool was
ename:VK_QUERY_TYPE_OCCLUSION, the sname:VkCommandPool that
pname:commandBuffer was allocated from must: support graphics operations
* If the pname:queryType used to create pname:queryPool was
* [[VUID-vkCmdBeginQuery-queryType-00804]] If the pname:queryType used to create pname:queryPool was
ename:VK_QUERY_TYPE_PIPELINE_STATISTICS and any of the
pname:pipelineStatistics indicate graphics operations, the
sname:VkCommandPool that pname:commandBuffer was allocated from must:
support graphics operations
* If the pname:queryType used to create pname:queryPool was
* [[VUID-vkCmdBeginQuery-queryType-00805]] If the pname:queryType used to create pname:queryPool was
ename:VK_QUERY_TYPE_PIPELINE_STATISTICS and any of the
pname:pipelineStatistics indicate compute operations, the
sname:VkCommandPool that pname:commandBuffer was allocated from must:
support compute operations
ifdef::VK_KHX_multiview[]
* All queries used by the command must: not be active
* All queries used by the command must: be unavailable
* If fname:vkCmdBeginQuery is called within a render pass instance, the
* [[VUID-vkCmdBeginQuery-None-00806]] All queries used by the command must: not be active
* [[VUID-vkCmdBeginQuery-None-00807]] All queries used by the command must: be unavailable
* [[VUID-vkCmdBeginQuery-query-00808]] If fname:vkCmdBeginQuery is called within a render pass instance, the
sum of pname:query and the number of bits set in the current subpass's
view mask must: be less than or equal to the number of queries in
pname:queryPool
@ -335,12 +335,12 @@ of the query.
.Valid Usage
****
* The query identified by pname:queryPool and pname:query must: currently
* [[VUID-vkCmdEndQuery-queryPool-00809]] The query identified by pname:queryPool and pname:query must: currently
be <<queries-operation-active,active>>
* pname:query must: be less than the number of queries in pname:queryPool
* [[VUID-vkCmdEndQuery-query-00810]] pname:query must: be less than the number of queries in pname:queryPool
ifdef::VK_KHX_multiview[]
* All queries used by the command must: be active
* If fname:vkCmdEndQuery is called within a render pass instance, the sum
* [[VUID-vkCmdEndQuery-None-00811]] All queries used by the command must: be active
* [[VUID-vkCmdEndQuery-query-00812]] If fname:vkCmdEndQuery is called within a render pass instance, the sum
of pname:query and the number of bits set in the current subpass's view
mask must: be less than or equal to the number of queries in
pname:queryPool
@ -501,17 +501,17 @@ e.g. to read the availability status before reading the results.
.Valid Usage
****
* pname:firstQuery must: be less than the number of queries in
* [[VUID-vkGetQueryPoolResults-firstQuery-00813]] pname:firstQuery must: be less than the number of queries in
pname:queryPool
* If ename:VK_QUERY_RESULT_64_BIT is not set in pname:flags then
* [[VUID-vkGetQueryPoolResults-flags-00814]] If ename:VK_QUERY_RESULT_64_BIT is not set in pname:flags then
pname:pData and pname:stride must: be multiples of `4`
* If ename:VK_QUERY_RESULT_64_BIT is set in pname:flags then pname:pData
* [[VUID-vkGetQueryPoolResults-flags-00815]] If ename:VK_QUERY_RESULT_64_BIT is set in pname:flags then pname:pData
and pname:stride must: be multiples of `8`
* The sum of pname:firstQuery and pname:queryCount must: be less than or
* [[VUID-vkGetQueryPoolResults-firstQuery-00816]] The sum of pname:firstQuery and pname:queryCount must: be less than or
equal to the number of queries in pname:queryPool
* pname:dataSize must: be large enough to contain the result of each
* [[VUID-vkGetQueryPoolResults-dataSize-00817]] pname:dataSize must: be large enough to contain the result of each
query, as described <<queries-operation-memorylayout,here>>
* If the pname:queryType used to create pname:queryPool was
* [[VUID-vkGetQueryPoolResults-queryType-00818]] If the pname:queryType used to create pname:queryPool was
ename:VK_QUERY_TYPE_TIMESTAMP, pname:flags must: not contain
ename:VK_QUERY_RESULT_PARTIAL_BIT
****
@ -595,23 +595,23 @@ before using the results.
.Valid Usage
****
* pname:dstOffset must: be less than the size of pname:dstBuffer
* pname:firstQuery must: be less than the number of queries in
* [[VUID-vkCmdCopyQueryPoolResults-dstOffset-00819]] pname:dstOffset must: be less than the size of pname:dstBuffer
* [[VUID-vkCmdCopyQueryPoolResults-firstQuery-00820]] pname:firstQuery must: be less than the number of queries in
pname:queryPool
* The sum of pname:firstQuery and pname:queryCount must: be less than or
* [[VUID-vkCmdCopyQueryPoolResults-firstQuery-00821]] The sum of pname:firstQuery and pname:queryCount must: be less than or
equal to the number of queries in pname:queryPool
* If ename:VK_QUERY_RESULT_64_BIT is not set in pname:flags then
* [[VUID-vkCmdCopyQueryPoolResults-flags-00822]] If ename:VK_QUERY_RESULT_64_BIT is not set in pname:flags then
pname:dstOffset and pname:stride must: be multiples of `4`
* If ename:VK_QUERY_RESULT_64_BIT is set in pname:flags then
* [[VUID-vkCmdCopyQueryPoolResults-flags-00823]] If ename:VK_QUERY_RESULT_64_BIT is set in pname:flags then
pname:dstOffset and pname:stride must: be multiples of `8`
* pname:dstBuffer must: have enough storage, from pname:dstOffset, to
* [[VUID-vkCmdCopyQueryPoolResults-dstBuffer-00824]] pname:dstBuffer must: have enough storage, from pname:dstOffset, to
contain the result of each query, as described
<<queries-operation-memorylayout,here>>
* pname:dstBuffer must: have been created with
* [[VUID-vkCmdCopyQueryPoolResults-dstBuffer-00825]] pname:dstBuffer must: have been created with
ename:VK_BUFFER_USAGE_TRANSFER_DST_BIT usage flag
* If pname:dstBuffer is non-sparse then it must: be bound completely and
* [[VUID-vkCmdCopyQueryPoolResults-dstBuffer-00826]] If pname:dstBuffer is non-sparse then it must: be bound completely and
contiguously to a single sname:VkDeviceMemory object
* If the pname:queryType used to create pname:queryPool was
* [[VUID-vkCmdCopyQueryPoolResults-queryType-00827]] If the pname:queryType used to create pname:queryPool was
ename:VK_QUERY_TYPE_TIMESTAMP, pname:flags must: not contain
ename:VK_QUERY_RESULT_PARTIAL_BIT
****
@ -917,13 +917,13 @@ endif::VK_KHX_multiview[]
.Valid Usage
****
* The query identified by pname:queryPool and pname:query must: be
* [[VUID-vkCmdWriteTimestamp-queryPool-00828]] The query identified by pname:queryPool and pname:query must: be
_unavailable_
* The command pool's queue family must: support a non-zero
* [[VUID-vkCmdWriteTimestamp-timestampValidBits-00829]] The command pool's queue family must: support a non-zero
pname:timestampValidBits
ifdef::VK_KHX_multiview[]
* All queries used by the command must: be unavailable
* If fname:vkCmdWriteTimestamp is called within a render pass instance,
* [[VUID-vkCmdWriteTimestamp-None-00830]] All queries used by the command must: be unavailable
* [[VUID-vkCmdWriteTimestamp-query-00831]] If fname:vkCmdWriteTimestamp is called within a render pass instance,
the sum of pname:query and the number of bits set in the current
subpass's view mask must: be less than or equal to the number of queries
in pname:queryPool

View File

@ -153,12 +153,12 @@ include::../api/structs/VkRenderPassCreateInfo.txt[]
.Valid Usage
****
* If any two subpasses operate on attachments with overlapping ranges of
* [[VUID-VkRenderPassCreateInfo-None-00832]] If any two subpasses operate on attachments with overlapping ranges of
the same sname:VkDeviceMemory object, and at least one subpass writes to
that area of sname:VkDeviceMemory, a subpass dependency must: be
included (either directly or via some intermediate subpasses) between
them
* If the pname:attachment member of any element of
* [[VUID-VkRenderPassCreateInfo-attachment-00833]] If the pname:attachment member of any element of
pname:pInputAttachments, pname:pColorAttachments,
pname:pResolveAttachments or pname:pDepthStencilAttachment, or the
attachment indexed by any element of pname:pPreserveAttachments in any
@ -167,26 +167,26 @@ include::../api/structs/VkRenderPassCreateInfo.txt[]
any subpass (including the same subpass), the
sname:VkAttachmentDescription structures describing them must: include
ename:VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT in pname:flags
* If the pname:attachment member of any element of
* [[VUID-VkRenderPassCreateInfo-attachment-00834]] If the pname:attachment member of any element of
pname:pInputAttachments, pname:pColorAttachments,
pname:pResolveAttachments or pname:pDepthStencilAttachment, or any
element of pname:pPreserveAttachments in any given element of
pname:pSubpasses is not ename:VK_ATTACHMENT_UNUSED, it must: be less
than pname:attachmentCount
* The value of any element of the pname:pPreserveAttachments member in any
* [[VUID-VkRenderPassCreateInfo-pPreserveAttachments-00835]] The value of any element of the pname:pPreserveAttachments member in any
given element of pname:pSubpasses must: not be
ename:VK_ATTACHMENT_UNUSED
* For any member of pname:pAttachments with a pname:loadOp equal to
* [[VUID-VkRenderPassCreateInfo-pAttachments-00836]] For any member of pname:pAttachments with a pname:loadOp equal to
ename:VK_ATTACHMENT_LOAD_OP_CLEAR, the first use of that attachment
must: not specify a pname:layout equal to
pname:VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL or
pname:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL.
* For any element of pname:pDependencies, if the pname:srcSubpass is not
* [[VUID-VkRenderPassCreateInfo-pDependencies-00837]] For any element of pname:pDependencies, if the pname:srcSubpass is not
ename:VK_SUBPASS_EXTERNAL, all stage flags included in the
pname:srcStageMask member of that dependency must: be a pipeline stage
supported by the <<synchronization-pipeline-stages-types, pipeline>>
identified by the pname:pipelineBindPoint member of the source subpass.
* For any element of pname:pDependencies, if the pname:dstSubpass is not
* [[VUID-VkRenderPassCreateInfo-pDependencies-00838]] For any element of pname:pDependencies, if the pname:dstSubpass is not
ename:VK_SUBPASS_EXTERNAL, all stage flags included in the
pname:dstStageMask member of that dependency must: be a pipeline stage
supported by the <<synchronization-pipeline-stages-types, pipeline>>
@ -326,15 +326,15 @@ endif::VK_NVX_multiview_per_view_attributes[]
.Valid Usage
****
* If pname:subpassCount is not zero, pname:subpassCount must: be equal to
* [[VUID-VkRenderPassMultiviewCreateInfoKHX-subpassCount-00839]] If pname:subpassCount is not zero, pname:subpassCount must: be equal to
the pname:subpassCount in the sname:VkRenderPassCreateInfo structure at
the start of the chain
* If pname:dependencyCount is not zero, pname:dependencyCount must: be
* [[VUID-VkRenderPassMultiviewCreateInfoKHX-dependencyCount-00840]] If pname:dependencyCount is not zero, pname:dependencyCount must: be
equal to the pname:dependencyCount in the sname:VkRenderPassCreateInfo
structure at the start of the chain
* Each view index must: not be set in more than one element of
* [[VUID-VkRenderPassMultiviewCreateInfoKHX-pCorrelationMasks-00841]] Each view index must: not be set in more than one element of
pname:pCorrelationMasks
* If an element of pname:pViewOffsets is non-zero, the corresponding
* [[VUID-VkRenderPassMultiviewCreateInfoKHX-pViewOffsets-00842]] If an element of pname:pViewOffsets is non-zero, the corresponding
slink:VkSubpassDependency structure must: have different values of
pname:srcSubpass and pname:dstSubpass.
****
@ -504,7 +504,7 @@ This is described in more detail below.
.Valid Usage
****
* pname:finalLayout must: not be ename:VK_IMAGE_LAYOUT_UNDEFINED or
* [[VUID-VkAttachmentDescription-finalLayout-00843]] pname:finalLayout must: not be ename:VK_IMAGE_LAYOUT_UNDEFINED or
ename:VK_IMAGE_LAYOUT_PREINITIALIZED
****
@ -680,38 +680,38 @@ attachment.
.Valid Usage
****
* pname:pipelineBindPoint must: be ename:VK_PIPELINE_BIND_POINT_GRAPHICS
* pname:colorAttachmentCount must: be less than or equal to
* [[VUID-VkSubpassDescription-pipelineBindPoint-00844]] pname:pipelineBindPoint must: be ename:VK_PIPELINE_BIND_POINT_GRAPHICS
* [[VUID-VkSubpassDescription-colorAttachmentCount-00845]] pname:colorAttachmentCount must: be less than or equal to
sname:VkPhysicalDeviceLimits::pname:maxColorAttachments
* If the first use of an attachment in this render pass is as an input
* [[VUID-VkSubpassDescription-loadOp-00846]] If the first use of an attachment in this render pass is as an input
attachment, and the attachment is not also used as a color or
depth/stencil attachment in the same subpass, then pname:loadOp must:
not be ename:VK_ATTACHMENT_LOAD_OP_CLEAR
* If pname:pResolveAttachments is not `NULL`, for each resolve attachment
* [[VUID-VkSubpassDescription-pResolveAttachments-00847]] If pname:pResolveAttachments is not `NULL`, for each resolve attachment
that does not have the value ename:VK_ATTACHMENT_UNUSED, the
corresponding color attachment must: not have the value
ename:VK_ATTACHMENT_UNUSED
* If pname:pResolveAttachments is not `NULL`, the sample count of each
* [[VUID-VkSubpassDescription-pResolveAttachments-00848]] If pname:pResolveAttachments is not `NULL`, the sample count of each
element of pname:pColorAttachments must: be anything other than
ename:VK_SAMPLE_COUNT_1_BIT
* Any given element of pname:pResolveAttachments must: have a sample count
* [[VUID-VkSubpassDescription-pResolveAttachments-00849]] Any given element of pname:pResolveAttachments must: have a sample count
of ename:VK_SAMPLE_COUNT_1_BIT
* Any given element of pname:pResolveAttachments must: have the same
* [[VUID-VkSubpassDescription-pResolveAttachments-00850]] Any given element of pname:pResolveAttachments must: have the same
elink:VkFormat as its corresponding color attachment
* All attachments in pname:pColorAttachments and
* [[VUID-VkSubpassDescription-pColorAttachments-00851]] All attachments in pname:pColorAttachments and
pname:pDepthStencilAttachment that are not ename:VK_ATTACHMENT_UNUSED
must: have the same sample count
* If any input attachments are ename:VK_ATTACHMENT_UNUSED, then any
* [[VUID-VkSubpassDescription-None-00852]] If any input attachments are ename:VK_ATTACHMENT_UNUSED, then any
pipelines bound during the subpass must: not access those input
attachments from the fragment shader
* The pname:attachment member of any element of pname:pPreserveAttachments
* [[VUID-VkSubpassDescription-attachment-00853]] The pname:attachment member of any element of pname:pPreserveAttachments
must: not be ename:VK_ATTACHMENT_UNUSED
* Any given element of pname:pPreserveAttachments must: not also be an
* [[VUID-VkSubpassDescription-pPreserveAttachments-00854]] Any given element of pname:pPreserveAttachments must: not also be an
element of any other member of the subpass description
* If any attachment is used as both an input attachment and a color or
* [[VUID-VkSubpassDescription-layout-00855]] If any attachment is used as both an input attachment and a color or
depth/stencil attachment, then each use must: use the same pname:layout
ifdef::VK_NVX_multiview_per_view_attributes[]
* If pname:flags includes
* [[VUID-VkSubpassDescription-flags-00856]] If pname:flags includes
ename:VK_SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX, it must:
also include ename:VK_SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX.
endif::VK_NVX_multiview_per_view_attributes[]
@ -735,7 +735,7 @@ include::../api/structs/VkAttachmentReference.txt[]
.Valid Usage
****
* pname:layout must: not be ename:VK_IMAGE_LAYOUT_UNDEFINED or
* [[VUID-VkAttachmentReference-layout-00857]] pname:layout must: not be ename:VK_IMAGE_LAYOUT_UNDEFINED or
ename:VK_IMAGE_LAYOUT_PREINITIALIZED
****
@ -814,30 +814,30 @@ render pass.
.Valid Usage
****
* If pname:srcSubpass is not ename:VK_SUBPASS_EXTERNAL, pname:srcStageMask
* [[VUID-VkSubpassDependency-srcSubpass-00858]] If pname:srcSubpass is not ename:VK_SUBPASS_EXTERNAL, pname:srcStageMask
must: not include ename:VK_PIPELINE_STAGE_HOST_BIT
* If pname:dstSubpass is not ename:VK_SUBPASS_EXTERNAL, pname:dstStageMask
* [[VUID-VkSubpassDependency-dstSubpass-00859]] If pname:dstSubpass is not ename:VK_SUBPASS_EXTERNAL, pname:dstStageMask
must: not include ename:VK_PIPELINE_STAGE_HOST_BIT
* If the <<features-features-geometryShader,geometry shaders>> feature is
* [[VUID-VkSubpassDependency-srcStageMask-00860]] If the <<features-features-geometryShader,geometry shaders>> feature is
not enabled, pname:srcStageMask must: not contain
ename:VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT
* If the <<features-features-geometryShader,geometry shaders>> feature is
* [[VUID-VkSubpassDependency-dstStageMask-00861]] If the <<features-features-geometryShader,geometry shaders>> feature is
not enabled, pname:dstStageMask must: not contain
ename:VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT
* If the <<features-features-tessellationShader,tessellation shaders>>
* [[VUID-VkSubpassDependency-srcStageMask-00862]] If the <<features-features-tessellationShader,tessellation shaders>>
feature is not enabled, pname:srcStageMask must: not contain
ename:VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT or
ename:VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT
* If the <<features-features-tessellationShader,tessellation shaders>>
* [[VUID-VkSubpassDependency-dstStageMask-00863]] If the <<features-features-tessellationShader,tessellation shaders>>
feature is not enabled, pname:dstStageMask must: not contain
ename:VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT or
ename:VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT
* pname:srcSubpass must: be less than or equal to pname:dstSubpass, unless
* [[VUID-VkSubpassDependency-srcSubpass-00864]] pname:srcSubpass must: be less than or equal to pname:dstSubpass, unless
one of them is ename:VK_SUBPASS_EXTERNAL, to avoid cyclic dependencies
and ensure a valid execution order
* pname:srcSubpass and pname:dstSubpass must: not both be equal to
* [[VUID-VkSubpassDependency-srcSubpass-00865]] pname:srcSubpass and pname:dstSubpass must: not both be equal to
ename:VK_SUBPASS_EXTERNAL
* If pname:srcSubpass is equal to pname:dstSubpass, pname:srcStageMask and
* [[VUID-VkSubpassDependency-srcSubpass-00866]] If pname:srcSubpass is equal to pname:dstSubpass, pname:srcStageMask and
pname:dstStageMask must: only contain one of
ename:VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,
ename:VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT,
@ -852,7 +852,7 @@ render pass.
ename:VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,
ename:VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT, or
ename:VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT
* If pname:srcSubpass is equal to pname:dstSubpass and not all of the
* [[VUID-VkSubpassDependency-srcSubpass-00867]] If pname:srcSubpass is equal to pname:dstSubpass and not all of the
stages in pname:srcStageMask and pname:dstStageMask are
<<synchronization-framebuffer-regions,framebuffer-space stages>>, the
<<synchronization-pipeline-stages-order, logically latest>> pipeline
@ -860,22 +860,22 @@ render pass.
<<synchronization-pipeline-stages-order, logically earlier>> than or
equal to the <<synchronization-pipeline-stages-order, logically
earliest>> pipeline stage in pname:dstStageMask
* Any access flag included in pname:srcAccessMask must: be supported by
* [[VUID-VkSubpassDependency-srcAccessMask-00868]] Any access flag included in pname:srcAccessMask must: be supported by
one of the pipeline stages in pname:srcStageMask, as specified in the
<<synchronization-access-types-supported, table of supported access
types>>.
* Any access flag included in pname:dstAccessMask must: be supported by
* [[VUID-VkSubpassDependency-dstAccessMask-00869]] Any access flag included in pname:dstAccessMask must: be supported by
one of the pipeline stages in pname:dstStageMask, as specified in the
<<synchronization-access-types-supported, table of supported access
types>>.
ifdef::VK_KHX_multiview[]
* If pname:dependencyFlags includes
* [[VUID-VkSubpassDependency-dependencyFlags-00870]] If pname:dependencyFlags includes
ename:VK_DEPENDENCY_VIEW_LOCAL_BIT_KHX, then both pname:srcSubpass and
pname:dstSubpass must: not equal ename:VK_SUBPASS_EXTERNAL
* If pname:dependencyFlags includes
* [[VUID-VkSubpassDependency-dependencyFlags-00871]] If pname:dependencyFlags includes
ename:VK_DEPENDENCY_VIEW_LOCAL_BIT_KHX, then the render pass must: have
multiview enabled
* If pname:srcSubpass equals pname:dstSubpass and that subpass has more
* [[VUID-VkSubpassDependency-srcSubpass-00872]] If pname:srcSubpass equals pname:dstSubpass and that subpass has more
than one bit set in the view mask, then pname:dependencyFlags must:
include ename:VK_DEPENDENCY_VIEW_LOCAL_BIT_KHX
endif::VK_KHX_multiview[]
@ -1071,10 +1071,18 @@ conditions:
subpass.
An attachment used as both an input attachment and a color attachment must:
be in the ename:VK_IMAGE_LAYOUT_GENERAL layout.
be in the
ifdef::VK_KHR_shared_presentable_image[]
ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR or
endif::VK_KHR_shared_presentable_image[]
ename:VK_IMAGE_LAYOUT_GENERAL layout.
An attachment used as an input attachment and depth/stencil attachment must:
be in the ename:VK_IMAGE_LAYOUT_GENERAL or
ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL layout.
be in the
ifdef::VK_KHR_shared_presentable_image[]
ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR,
endif::VK_KHR_shared_presentable_image[]
ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL, or
ename:VK_IMAGE_LAYOUT_GENERAL layout.
An attachment must: not be used as both a depth/stencil attachment and a
color attachment.
@ -1091,11 +1099,11 @@ include::../api/protos/vkDestroyRenderPass.txt[]
.Valid Usage
****
* All submitted commands that refer to pname:renderPass must: have
* [[VUID-vkDestroyRenderPass-renderPass-00873]] All submitted commands that refer to pname:renderPass must: have
completed execution
* If sname:VkAllocationCallbacks were provided when pname:renderPass was
* [[VUID-vkDestroyRenderPass-renderPass-00874]] If sname:VkAllocationCallbacks were provided when pname:renderPass was
created, a compatible set of callbacks must: be provided here
* If no sname:VkAllocationCallbacks were provided when pname:renderPass
* [[VUID-vkDestroyRenderPass-renderPass-00875]] If no sname:VkAllocationCallbacks were provided when pname:renderPass
was created, pname:pAllocator must: be `NULL`
****
@ -1214,42 +1222,42 @@ slink:VkPipelineMultisampleStateCreateInfo::pname:rasterizationSamples.
.Valid Usage
****
* pname:attachmentCount must: be equal to the attachment count specified
* [[VUID-VkFramebufferCreateInfo-attachmentCount-00876]] pname:attachmentCount must: be equal to the attachment count specified
in pname:renderPass
* Any given element of pname:pAttachments that is used as a color
* [[VUID-VkFramebufferCreateInfo-pAttachments-00877]] Any given element of pname:pAttachments that is used as a color
attachment or resolve attachment by pname:renderPass must: have been
created with a pname:usage value including
ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT
* Any given element of pname:pAttachments that is used as a depth/stencil
* [[VUID-VkFramebufferCreateInfo-pAttachments-00878]] Any given element of pname:pAttachments that is used as a depth/stencil
attachment by pname:renderPass must: have been created with a
pname:usage value including
ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
* Any given element of pname:pAttachments that is used as an input
* [[VUID-VkFramebufferCreateInfo-pAttachments-00879]] Any given element of pname:pAttachments that is used as an input
attachment by pname:renderPass must: have been created with a
pname:usage value including ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT
* Any given element of pname:pAttachments must: have been created with an
* [[VUID-VkFramebufferCreateInfo-pAttachments-00880]] Any given element of pname:pAttachments must: have been created with an
elink:VkFormat value that matches the elink:VkFormat specified by the
corresponding sname:VkAttachmentDescription in pname:renderPass
* Any given element of pname:pAttachments must: have been created with a
* [[VUID-VkFramebufferCreateInfo-pAttachments-00881]] Any given element of pname:pAttachments must: have been created with a
pname:samples value that matches the pname:samples value specified by
the corresponding sname:VkAttachmentDescription in pname:renderPass
* Any given element of pname:pAttachments must: have dimensions at least
* [[VUID-VkFramebufferCreateInfo-pAttachments-00882]] Any given element of pname:pAttachments must: have dimensions at least
as large as the corresponding framebuffer dimension
* Any given element of pname:pAttachments must: only specify a single mip
* [[VUID-VkFramebufferCreateInfo-pAttachments-00883]] Any given element of pname:pAttachments must: only specify a single mip
level
* Any given element of pname:pAttachments must: have been created with the
* [[VUID-VkFramebufferCreateInfo-pAttachments-00884]] Any given element of pname:pAttachments must: have been created with the
identity swizzle
* pname:width must: be greater than `0`.
* pname:width must: be less than or equal to
* [[VUID-VkFramebufferCreateInfo-width-00885]] pname:width must: be greater than `0`.
* [[VUID-VkFramebufferCreateInfo-width-00886]] pname:width must: be less than or equal to
sname:VkPhysicalDeviceLimits::pname:maxFramebufferWidth
* pname:height must: be greater than `0`.
* pname:height must: be less than or equal to
* [[VUID-VkFramebufferCreateInfo-height-00887]] pname:height must: be greater than `0`.
* [[VUID-VkFramebufferCreateInfo-height-00888]] pname:height must: be less than or equal to
sname:VkPhysicalDeviceLimits::pname:maxFramebufferHeight
* pname:layers must: be greater than `0`.
* pname:layers must: be less than or equal to
* [[VUID-VkFramebufferCreateInfo-layers-00889]] pname:layers must: be greater than `0`.
* [[VUID-VkFramebufferCreateInfo-layers-00890]] pname:layers must: be less than or equal to
sname:VkPhysicalDeviceLimits::pname:maxFramebufferLayers
ifdef::VK_KHR_maintenance1[]
* Any given element of pname:pAttachments that is a 2D or 2D array image
* [[VUID-VkFramebufferCreateInfo-pAttachments-00891]] Any given element of pname:pAttachments that is a 2D or 2D array image
view taken from a 3D image must: not be a depth/stencil format
endif::VK_KHR_maintenance1[]
****
@ -1269,11 +1277,11 @@ include::../api/protos/vkDestroyFramebuffer.txt[]
.Valid Usage
****
* All submitted commands that refer to pname:framebuffer must: have
* [[VUID-vkDestroyFramebuffer-framebuffer-00892]] All submitted commands that refer to pname:framebuffer must: have
completed execution
* If sname:VkAllocationCallbacks were provided when pname:framebuffer was
* [[VUID-vkDestroyFramebuffer-framebuffer-00893]] If sname:VkAllocationCallbacks were provided when pname:framebuffer was
created, a compatible set of callbacks must: be provided here
* If no sname:VkAllocationCallbacks were provided when pname:framebuffer
* [[VUID-vkDestroyFramebuffer-framebuffer-00894]] If no sname:VkAllocationCallbacks were provided when pname:framebuffer
was created, pname:pAllocator must: be `NULL`
****
@ -1321,7 +1329,7 @@ record the commands for the first subpass of that render pass.
.Valid Usage
****
* If any of the pname:initialLayout or pname:finalLayout member of the
* [[VUID-vkCmdBeginRenderPass-initialLayout-00895]] If any of the pname:initialLayout or pname:finalLayout member of the
sname:VkAttachmentDescription structures or the pname:layout member of
the sname:VkAttachmentReference structures specified when creating the
render pass specified in the pname:renderPass member of
@ -1330,7 +1338,7 @@ record the commands for the first subpass of that render pass.
specified in the pname:framebuffer member of pname:pRenderPassBegin
must: have been created with ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT
set
* If any of the pname:initialLayout or pname:finalLayout member of the
* [[VUID-vkCmdBeginRenderPass-initialLayout-00896]] If any of the pname:initialLayout or pname:finalLayout member of the
sname:VkAttachmentDescription structures or the pname:layout member of
the sname:VkAttachmentReference structures specified when creating the
render pass specified in the pname:renderPass member of
@ -1340,7 +1348,7 @@ record the commands for the first subpass of that render pass.
corresponding attachment image subresource of the framebuffer specified
in the pname:framebuffer member of pname:pRenderPassBegin must: have
been created with ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT set
* If any of the pname:initialLayout or pname:finalLayout member of the
* [[VUID-vkCmdBeginRenderPass-initialLayout-00897]] If any of the pname:initialLayout or pname:finalLayout member of the
sname:VkAttachmentDescription structures or the pname:layout member of
the sname:VkAttachmentReference structures specified when creating the
render pass specified in the pname:renderPass member of
@ -1349,7 +1357,7 @@ record the commands for the first subpass of that render pass.
specified in the pname:framebuffer member of pname:pRenderPassBegin
must: have been created with ename:VK_IMAGE_USAGE_SAMPLED_BIT or
ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT set
* If any of the pname:initialLayout or pname:finalLayout member of the
* [[VUID-vkCmdBeginRenderPass-initialLayout-00898]] If any of the pname:initialLayout or pname:finalLayout member of the
sname:VkAttachmentDescription structures or the pname:layout member of
the sname:VkAttachmentReference structures specified when creating the
render pass specified in the pname:renderPass member of
@ -1357,7 +1365,7 @@ record the commands for the first subpass of that render pass.
then the corresponding attachment image subresource of the framebuffer
specified in the pname:framebuffer member of pname:pRenderPassBegin
must: have been created with ename:VK_IMAGE_USAGE_TRANSFER_SRC_BIT set
* If any of the pname:initialLayout or pname:finalLayout member of the
* [[VUID-vkCmdBeginRenderPass-initialLayout-00899]] If any of the pname:initialLayout or pname:finalLayout member of the
sname:VkAttachmentDescription structures or the pname:layout member of
the sname:VkAttachmentReference structures specified when creating the
render pass specified in the pname:renderPass member of
@ -1365,14 +1373,14 @@ record the commands for the first subpass of that render pass.
then the corresponding attachment image subresource of the framebuffer
specified in the pname:framebuffer member of pname:pRenderPassBegin
must: have been created with ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT set
* If any of the pname:initialLayout members of the
* [[VUID-vkCmdBeginRenderPass-initialLayout-00900]] If any of the pname:initialLayout members of the
sname:VkAttachmentDescription structures specified when creating the
render pass specified in the pname:renderPass member of
pname:pRenderPassBegin is not ename:VK_IMAGE_LAYOUT_UNDEFINED, then each
such pname:initialLayout must: be equal to the current layout of the
corresponding attachment image subresource of the framebuffer specified
in the pname:framebuffer member of pname:pRenderPassBegin
* The pname:srcStageMask and pname:dstStageMask members of any element of
* [[VUID-vkCmdBeginRenderPass-srcStageMask-00901]] The pname:srcStageMask and pname:dstStageMask members of any element of
the pname:pDependencies member of slink:VkRenderPassCreateInfo used to
create pname:renderpass must: be supported by the capabilities of the
queue family identified by the pname:queueFamilyIndex member of the
@ -1434,14 +1442,14 @@ pass.
.Valid Usage
****
* pname:clearValueCount must: be greater than the largest attachment index
* [[VUID-VkRenderPassBeginInfo-clearValueCount-00902]] pname:clearValueCount must: be greater than the largest attachment index
in pname:renderPass that specifies a pname:loadOp (or
pname:stencilLoadOp, if the attachment has a depth/stencil format) of
ename:VK_ATTACHMENT_LOAD_OP_CLEAR
* If pname:clearValueCount is not `0`, pname:pClearValues must: be a
* [[VUID-VkRenderPassBeginInfo-clearValueCount-00903]] If pname:clearValueCount is not `0`, pname:pClearValues must: be a
pointer to an array of pname:clearValueCount valid sname:VkClearValue
unions
* pname:renderPass must: be <<renderpass-compatibility,compatible>> with
* [[VUID-VkRenderPassBeginInfo-renderPass-00904]] pname:renderPass must: be <<renderpass-compatibility,compatible>> with
the pname:renderPass member of the sname:VkFramebufferCreateInfo
structure specified when creating pname:framebuffer.
****
@ -1493,11 +1501,11 @@ devices.
.Valid Usage
****
* pname:deviceMask must: be a valid device mask value
* pname:deviceMask must: not be zero
* pname:deviceMask must: be a subset of the command buffer's initial
* [[VUID-VkDeviceGroupRenderPassBeginInfoKHX-deviceMask-00905]] pname:deviceMask must: be a valid device mask value
* [[VUID-VkDeviceGroupRenderPassBeginInfoKHX-deviceMask-00906]] pname:deviceMask must: not be zero
* [[VUID-VkDeviceGroupRenderPassBeginInfoKHX-deviceMask-00907]] pname:deviceMask must: be a subset of the command buffer's initial
device mask
* pname:deviceRenderAreaCount must: either be zero or equal to the number
* [[VUID-VkDeviceGroupRenderPassBeginInfoKHX-deviceRenderAreaCount-00908]] pname:deviceRenderAreaCount must: either be zero or equal to the number
of physical devices in the logical device.
****
@ -1575,7 +1583,7 @@ commands for that subpass.
.Valid Usage
****
* The current subpass index must: be less than the number of subpasses in
* [[VUID-vkCmdNextSubpass-None-00909]] The current subpass index must: be less than the number of subpasses in
the render pass minus one
****
@ -1596,7 +1604,7 @@ the final subpass.
.Valid Usage
****
* The current subpass index must: be equal to the number of subpasses in
* [[VUID-vkCmdEndRenderPass-None-00910]] The current subpass index must: be equal to the number of subpasses in
the render pass minus one
****

View File

@ -44,7 +44,7 @@ include::../api/protos/vkCreateBuffer.txt[]
.Valid Usage
****
* If the pname:flags member of pname:pCreateInfo includes
* [[VUID-vkCreateBuffer-flags-00911]] If the pname:flags member of pname:pCreateInfo includes
ename:VK_BUFFER_CREATE_SPARSE_BINDING_BIT, creating this sname:VkBuffer
must: not cause the total required sparse memory for all currently valid
sparse resources on the device to exceed
@ -152,26 +152,26 @@ memory features supported on a device.
.Valid Usage
****
* pname:size must: be greater than `0`
* If pname:sharingMode is ename:VK_SHARING_MODE_CONCURRENT,
* [[VUID-VkBufferCreateInfo-size-00912]] pname:size must: be greater than `0`
* [[VUID-VkBufferCreateInfo-sharingMode-00913]] If pname:sharingMode is ename:VK_SHARING_MODE_CONCURRENT,
pname:pQueueFamilyIndices must: be a pointer to an array of
pname:queueFamilyIndexCount basetype:uint32_t values
* If pname:sharingMode is ename:VK_SHARING_MODE_CONCURRENT,
* [[VUID-VkBufferCreateInfo-sharingMode-00914]] If pname:sharingMode is ename:VK_SHARING_MODE_CONCURRENT,
pname:queueFamilyIndexCount must: be greater than `1`
* If the <<features-features-sparseBinding,sparse bindings>> feature is
* [[VUID-VkBufferCreateInfo-flags-00915]] If the <<features-features-sparseBinding,sparse bindings>> feature is
not enabled, pname:flags must: not contain
ename:VK_BUFFER_CREATE_SPARSE_BINDING_BIT
* If the <<features-features-sparseResidencyBuffer,sparse buffer
* [[VUID-VkBufferCreateInfo-flags-00916]] If the <<features-features-sparseResidencyBuffer,sparse buffer
residency>> feature is not enabled, pname:flags must: not contain
ename:VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT
* If the <<features-features-sparseResidencyAliased,sparse aliased
* [[VUID-VkBufferCreateInfo-flags-00917]] If the <<features-features-sparseResidencyAliased,sparse aliased
residency>> feature is not enabled, pname:flags must: not contain
ename:VK_BUFFER_CREATE_SPARSE_ALIASED_BIT
* If pname:flags contains ename:VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT or
* [[VUID-VkBufferCreateInfo-flags-00918]] If pname:flags contains ename:VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT or
ename:VK_BUFFER_CREATE_SPARSE_ALIASED_BIT, it must: also contain
ename:VK_BUFFER_CREATE_SPARSE_BINDING_BIT
ifdef::VK_KHX_external_memory+VK_NV_dedicated_allocation[]
* If any of the handle types specified in
* [[VUID-VkBufferCreateInfo-handleTypes-00919]] If any of the handle types specified in
sname:VkExternalMemoryImageCreateInfoKHX::pname:handleTypes requires
dedicated allocation, as reported by
flink:vkGetPhysicalDeviceExternalBufferPropertiesKHX in
@ -181,7 +181,7 @@ ifdef::VK_KHX_external_memory+VK_NV_dedicated_allocation[]
pname:dedicatedAllocation field set to ename:VK_TRUE.
endif::VK_KHX_external_memory+VK_NV_dedicated_allocation[]
ifdef::VK_KHX_external_memory[]
* If the pname:pNext extension contains an instance of
* [[VUID-VkBufferCreateInfo-pNext-00920]] If the pname:pNext extension contains an instance of
slink:VkExternalMemoryBufferCreateInfoKHX, its pname:handleTypes member
must: only contain bits that are also in
slink:VkExternalBufferPropertiesKHX::pname:externalMemoryProperties.pname:compatibleHandleTypes,
@ -214,7 +214,7 @@ include::../api/structs/VkDedicatedAllocationBufferCreateInfoNV.txt[]
.Valid Usage
****
* If pname:dedicatedAllocation is ename:VK_TRUE,
* [[VUID-VkDedicatedAllocationBufferCreateInfoNV-dedicatedAllocation-00921]] If pname:dedicatedAllocation is ename:VK_TRUE,
sname:VkBufferCreateInfo::pname:flags must: not include
ename:VK_BUFFER_CREATE_SPARSE_BINDING_BIT,
ename:VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT, or
@ -260,11 +260,11 @@ include::../api/protos/vkDestroyBuffer.txt[]
.Valid Usage
****
* All submitted commands that refer to pname:buffer, either directly or
* [[VUID-vkDestroyBuffer-buffer-00922]] All submitted commands that refer to pname:buffer, either directly or
via a sname:VkBufferView, must: have completed execution
* If sname:VkAllocationCallbacks were provided when pname:buffer was
* [[VUID-vkDestroyBuffer-buffer-00923]] If sname:VkAllocationCallbacks were provided when pname:buffer was
created, a compatible set of callbacks must: be provided here
* If no sname:VkAllocationCallbacks were provided when pname:buffer was
* [[VUID-vkDestroyBuffer-buffer-00924]] If no sname:VkAllocationCallbacks were provided when pname:buffer was
created, pname:pAllocator must: be `NULL`
****
@ -333,33 +333,33 @@ include::../api/structs/VkBufferViewCreateInfo.txt[]
.Valid Usage
****
* pname:offset must: be less than the size of pname:buffer
* pname:offset must: be a multiple of
* [[VUID-VkBufferViewCreateInfo-offset-00925]] pname:offset must: be less than the size of pname:buffer
* [[VUID-VkBufferViewCreateInfo-offset-00926]] pname:offset must: be a multiple of
sname:VkPhysicalDeviceLimits::pname:minTexelBufferOffsetAlignment
* If pname:range is not equal to ename:VK_WHOLE_SIZE:
** pname:range must: be greater than `0`
** pname:range must: be a multiple of the element size of pname:format
** pname:range divided by the element size of pname:format, must: be less
* [[VUID-VkBufferViewCreateInfo-range-00927]] If pname:range is not equal to ename:VK_WHOLE_SIZE:
** [[VUID-VkBufferViewCreateInfo-range-00928]] pname:range must: be greater than `0`
** [[VUID-VkBufferViewCreateInfo-range-00929]] pname:range must: be a multiple of the element size of pname:format
** [[VUID-VkBufferViewCreateInfo-range-00930]] pname:range divided by the element size of pname:format, must: be less
than or equal to
sname:VkPhysicalDeviceLimits::pname:maxTexelBufferElements
** the sum of pname:offset and pname:range must: be less than or equal to
** [[VUID-VkBufferViewCreateInfo-offset-00931]] the sum of pname:offset and pname:range must: be less than or equal to
the size of pname:buffer
* pname:buffer must: have been created with a pname:usage value containing
* [[VUID-VkBufferViewCreateInfo-buffer-00932]] pname:buffer must: have been created with a pname:usage value containing
at least one of ename:VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT or
ename:VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT
* If pname:buffer was created with pname:usage containing
* [[VUID-VkBufferViewCreateInfo-buffer-00933]] If pname:buffer was created with pname:usage containing
ename:VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT, pname:format must: be
supported for uniform texel buffers, as specified by the
ename:VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT flag in
sname:VkFormatProperties::pname:bufferFeatures returned by
fname:vkGetPhysicalDeviceFormatProperties
* If pname:buffer was created with pname:usage containing
* [[VUID-VkBufferViewCreateInfo-buffer-00934]] If pname:buffer was created with pname:usage containing
ename:VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT, pname:format must: be
supported for storage texel buffers, as specified by the
ename:VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT flag in
sname:VkFormatProperties::pname:bufferFeatures returned by
fname:vkGetPhysicalDeviceFormatProperties
* If pname:buffer is non-sparse then it must: be bound completely and
* [[VUID-VkBufferViewCreateInfo-buffer-00935]] If pname:buffer is non-sparse then it must: be bound completely and
contiguously to a single sname:VkDeviceMemory object
****
@ -378,11 +378,11 @@ include::../api/protos/vkDestroyBufferView.txt[]
.Valid Usage
****
* All submitted commands that refer to pname:bufferView must: have
* [[VUID-vkDestroyBufferView-bufferView-00936]] All submitted commands that refer to pname:bufferView must: have
completed execution
* If sname:VkAllocationCallbacks were provided when pname:bufferView was
* [[VUID-vkDestroyBufferView-bufferView-00937]] If sname:VkAllocationCallbacks were provided when pname:bufferView was
created, a compatible set of callbacks must: be provided here
* If no sname:VkAllocationCallbacks were provided when pname:bufferView
* [[VUID-vkDestroyBufferView-bufferView-00938]] If no sname:VkAllocationCallbacks were provided when pname:bufferView
was created, pname:pAllocator must: be `NULL`
****
@ -422,7 +422,7 @@ include::../api/protos/vkCreateImage.txt[]
.Valid Usage
****
* If the pname:flags member of pname:pCreateInfo includes
* [[VUID-vkCreateImage-flags-00939]] If the pname:flags member of pname:pCreateInfo includes
ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT, creating this sname:VkImage
must: not cause the total required sparse memory for all currently valid
sparse resources on the device to exceed
@ -493,7 +493,13 @@ listed above.
To query an implementation's specific capabilities for a given combination
of pname:format, pname:type, pname:tiling, pname:usage, and pname:flags,
call flink:vkGetPhysicalDeviceImageFormatProperties.
call
ifdef::VK_KHR_get_physical_device_properties2[]
flink:vkGetPhysicalDeviceImageFormatProperties2KHR.
endif::VK_KHR_get_physical_device_properties2[]
ifndef::VK_KHR_get_physical_device_properties2[]
flink:vkGetPhysicalDeviceImageFormatProperties.
endif::VK_KHR_get_physical_device_properties2[]
The return value indicates whether that combination of image settings is
supported.
On success, the sname:VkImageFormatProperties output parameter indicates the
@ -505,36 +511,36 @@ flink:vkGetPhysicalDeviceFormatProperties.
.Valid Usage
****
* The combination of pname:format, pname:type, pname:tiling, pname:usage,
* [[VUID-VkImageCreateInfo-format-00940]] The combination of pname:format, pname:type, pname:tiling, pname:usage,
and pname:flags must: be supported, as indicated by a VK_SUCCESS return
value from fname:vkGetPhysicalDeviceImageFormatProperties invoked with
the same values passed to the corresponding parameters.
* If pname:sharingMode is ename:VK_SHARING_MODE_CONCURRENT,
* [[VUID-VkImageCreateInfo-sharingMode-00941]] If pname:sharingMode is ename:VK_SHARING_MODE_CONCURRENT,
pname:pQueueFamilyIndices must: be a pointer to an array of
pname:queueFamilyIndexCount basetype:uint32_t values
* If pname:sharingMode is ename:VK_SHARING_MODE_CONCURRENT,
* [[VUID-VkImageCreateInfo-sharingMode-00942]] If pname:sharingMode is ename:VK_SHARING_MODE_CONCURRENT,
pname:queueFamilyIndexCount must: be greater than `1`
* pname:format must: not be ename:VK_FORMAT_UNDEFINED
* pname:extent::pname:width must: be greater than `0`.
* pname:extent::pname:height must: be greater than `0`.
* pname:extent::pname:depth must: be greater than `0`.
* pname:mipLevels must: be greater than `0`
* pname:arrayLayers must: be greater than `0`
* If pname:flags contains ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT,
* [[VUID-VkImageCreateInfo-format-00943]] pname:format must: not be ename:VK_FORMAT_UNDEFINED
* [[VUID-VkImageCreateInfo-extent-00944]] pname:extent::pname:width must: be greater than `0`.
* [[VUID-VkImageCreateInfo-extent-00945]] pname:extent::pname:height must: be greater than `0`.
* [[VUID-VkImageCreateInfo-extent-00946]] pname:extent::pname:depth must: be greater than `0`.
* [[VUID-VkImageCreateInfo-mipLevels-00947]] pname:mipLevels must: be greater than `0`
* [[VUID-VkImageCreateInfo-arrayLayers-00948]] pname:arrayLayers must: be greater than `0`
* [[VUID-VkImageCreateInfo-flags-00949]] If pname:flags contains ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT,
pname:imageType must: be ename:VK_IMAGE_TYPE_2D
ifdef::VK_KHR_maintenance1[]
* If pname:flags contains
* [[VUID-VkImageCreateInfo-flags-00950]] If pname:flags contains
ename:VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT_KHR, pname:imageType must:
be ename:VK_IMAGE_TYPE_3D
endif::VK_KHR_maintenance1[]
* If pname:imageType is ename:VK_IMAGE_TYPE_1D, pname:extent.width must:
* [[VUID-VkImageCreateInfo-imageType-00951]] If pname:imageType is ename:VK_IMAGE_TYPE_1D, pname:extent.width must:
be less than or equal to
sname:VkPhysicalDeviceLimits::pname:maxImageDimension1D, or
sname:VkImageFormatProperties::pname:maxExtent.width (as returned by
fname:vkGetPhysicalDeviceImageFormatProperties with pname:format,
pname:type, pname:tiling, pname:usage, and pname:flags equal to those in
this structure) - whichever is higher
* If pname:imageType is ename:VK_IMAGE_TYPE_2D and pname:flags does not
* [[VUID-VkImageCreateInfo-imageType-00952]] If pname:imageType is ename:VK_IMAGE_TYPE_2D and pname:flags does not
contain ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT, pname:extent.width
and pname:extent.height must: be less than or equal to
sname:VkPhysicalDeviceLimits::pname:maxImageDimension2D, or
@ -542,7 +548,7 @@ endif::VK_KHR_maintenance1[]
by fname:vkGetPhysicalDeviceImageFormatProperties with pname:format,
pname:type, pname:tiling, pname:usage, and pname:flags equal to those in
this structure) - whichever is higher
* If pname:imageType is ename:VK_IMAGE_TYPE_2D and pname:flags contains
* [[VUID-VkImageCreateInfo-imageType-00953]] If pname:imageType is ename:VK_IMAGE_TYPE_2D and pname:flags contains
ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT, pname:extent.width and
pname:extent.height must: be less than or equal to
sname:VkPhysicalDeviceLimits::pname:maxImageDimensionCube, or
@ -550,25 +556,25 @@ endif::VK_KHR_maintenance1[]
by fname:vkGetPhysicalDeviceImageFormatProperties with pname:format,
pname:type, pname:tiling, pname:usage, and pname:flags equal to those in
this structure) - whichever is higher
* If pname:imageType is ename:VK_IMAGE_TYPE_2D and pname:flags contains
* [[VUID-VkImageCreateInfo-imageType-00954]] If pname:imageType is ename:VK_IMAGE_TYPE_2D and pname:flags contains
ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT, pname:extent.width and
pname:extent.height must: be equal and pname:arrayLayers must: be
greater than or equal to 6
* If pname:imageType is ename:VK_IMAGE_TYPE_3D, pname:extent.width,
* [[VUID-VkImageCreateInfo-imageType-00955]] If pname:imageType is ename:VK_IMAGE_TYPE_3D, pname:extent.width,
pname:extent.height and pname:extent.depth must: be less than or equal
to sname:VkPhysicalDeviceLimits::pname:maxImageDimension3D, or
sname:VkImageFormatProperties::pname:maxExtent.width/height/depth (as
returned by fname:vkGetPhysicalDeviceImageFormatProperties with
pname:format, pname:type, pname:tiling, pname:usage, and pname:flags
equal to those in this structure) - whichever is higher
* If pname:imageType is ename:VK_IMAGE_TYPE_1D, both pname:extent.height
* [[VUID-VkImageCreateInfo-imageType-00956]] If pname:imageType is ename:VK_IMAGE_TYPE_1D, both pname:extent.height
and pname:extent.depth must: be `1`
* If pname:imageType is ename:VK_IMAGE_TYPE_2D, pname:extent.depth must:
* [[VUID-VkImageCreateInfo-imageType-00957]] If pname:imageType is ename:VK_IMAGE_TYPE_2D, pname:extent.depth must:
be `1`
* pname:mipLevels must: be less than or equal to
* [[VUID-VkImageCreateInfo-mipLevels-00958]] pname:mipLevels must: be less than or equal to
[eq]#{lfloor}log~2~(max(pname:extent.width, pname:extent.height,
pname:extent.depth)){rfloor} + 1#.
* If any of pname:extent.width, pname:extent.height, or pname:extent.depth
* [[VUID-VkImageCreateInfo-extent-00959]] If any of pname:extent.width, pname:extent.height, or pname:extent.depth
are greater than the equivalently named members of
sname:VkPhysicalDeviceLimits::pname:maxImageDimension3D, pname:mipLevels
must: be less than or equal to
@ -576,148 +582,148 @@ endif::VK_KHR_maintenance1[]
fname:vkGetPhysicalDeviceImageFormatProperties with pname:format,
pname:type, pname:tiling, pname:usage, and pname:flags equal to those in
this structure)
* pname:arrayLayers must: be less than or equal to
* [[VUID-VkImageCreateInfo-arrayLayers-00960]] pname:arrayLayers must: be less than or equal to
sname:VkImageFormatProperties::pname:maxArrayLayers (as returned by
fname:vkGetPhysicalDeviceImageFormatProperties with pname:format,
pname:type, pname:tiling, pname:usage, and pname:flags equal to those in
this structure)
* If pname:imageType is ename:VK_IMAGE_TYPE_3D, pname:arrayLayers must: be
* [[VUID-VkImageCreateInfo-imageType-00961]] If pname:imageType is ename:VK_IMAGE_TYPE_3D, pname:arrayLayers must: be
`1`.
* If pname:samples is not ename:VK_SAMPLE_COUNT_1_BIT, pname:imageType
* [[VUID-VkImageCreateInfo-samples-00962]] If pname:samples is not ename:VK_SAMPLE_COUNT_1_BIT, pname:imageType
must: be ename:VK_IMAGE_TYPE_2D, pname:flags must: not contain
ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT, pname:tiling must: be
ename:VK_IMAGE_TILING_OPTIMAL, and pname:mipLevels must: be equal to `1`
* If pname:usage includes ename:VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT,
* [[VUID-VkImageCreateInfo-usage-00963]] If pname:usage includes ename:VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT,
then bits other than ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT,
ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, and
ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT must: not be set
* If pname:usage includes ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT,
* [[VUID-VkImageCreateInfo-usage-00964]] If pname:usage includes ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT,
ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT,
ename:VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT, or
ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT, pname:extent.width must: be
less than or equal to
sname:VkPhysicalDeviceLimits::pname:maxFramebufferWidth
* If pname:usage includes ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT,
* [[VUID-VkImageCreateInfo-usage-00965]] If pname:usage includes ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT,
ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT,
ename:VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT, or
ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT, pname:extent.height must: be
less than or equal to
sname:VkPhysicalDeviceLimits::pname:maxFramebufferHeight
* If pname:usage includes ename:VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT,
* [[VUID-VkImageCreateInfo-usage-00966]] If pname:usage includes ename:VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT,
pname:usage must: also contain at least one of
ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT,
ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, or
ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT.
* pname:samples must: be a bit value that is set in
* [[VUID-VkImageCreateInfo-samples-00967]] pname:samples must: be a bit value that is set in
sname:VkImageFormatProperties::pname:sampleCounts returned by
fname:vkGetPhysicalDeviceImageFormatProperties with pname:format,
pname:type, pname:tiling, pname:usage, and pname:flags equal to those in
this structure
* If the <<features-features-shaderStorageImageMultisample,multisampled
* [[VUID-VkImageCreateInfo-usage-00968]] If the <<features-features-shaderStorageImageMultisample,multisampled
storage images>> feature is not enabled, and pname:usage contains
ename:VK_IMAGE_USAGE_STORAGE_BIT, pname:samples must: be
ename:VK_SAMPLE_COUNT_1_BIT
* If the <<features-features-sparseBinding,sparse bindings>> feature is
* [[VUID-VkImageCreateInfo-flags-00969]] If the <<features-features-sparseBinding,sparse bindings>> feature is
not enabled, pname:flags must: not contain
ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT
* If pname:imageType is ename:VK_IMAGE_TYPE_1D, pname:flags must: not
* [[VUID-VkImageCreateInfo-imageType-00970]] If pname:imageType is ename:VK_IMAGE_TYPE_1D, pname:flags must: not
contain ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT
* If the <<features-features-sparseResidencyImage2D,sparse residency for
* [[VUID-VkImageCreateInfo-imageType-00971]] If the <<features-features-sparseResidencyImage2D,sparse residency for
2D images>> feature is not enabled, and pname:imageType is
ename:VK_IMAGE_TYPE_2D, pname:flags must: not contain
ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT
* If the <<features-features-sparseResidencyImage3D,sparse residency for
* [[VUID-VkImageCreateInfo-imageType-00972]] If the <<features-features-sparseResidencyImage3D,sparse residency for
3D images>> feature is not enabled, and pname:imageType is
ename:VK_IMAGE_TYPE_3D, pname:flags must: not contain
ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT
* If the <<features-features-sparseResidency2Samples,sparse residency for
* [[VUID-VkImageCreateInfo-imageType-00973]] If the <<features-features-sparseResidency2Samples,sparse residency for
images with 2 samples>> feature is not enabled, pname:imageType is
ename:VK_IMAGE_TYPE_2D, and pname:samples is
ename:VK_SAMPLE_COUNT_2_BIT, pname:flags must: not contain
ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT
* If the <<features-features-sparseResidency4Samples,sparse residency for
* [[VUID-VkImageCreateInfo-imageType-00974]] If the <<features-features-sparseResidency4Samples,sparse residency for
images with 4 samples>> feature is not enabled, pname:imageType is
ename:VK_IMAGE_TYPE_2D, and pname:samples is
ename:VK_SAMPLE_COUNT_4_BIT, pname:flags must: not contain
ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT
* If the <<features-features-sparseResidency8Samples,sparse residency for
* [[VUID-VkImageCreateInfo-imageType-00975]] If the <<features-features-sparseResidency8Samples,sparse residency for
images with 8 samples>> feature is not enabled, pname:imageType is
ename:VK_IMAGE_TYPE_2D, and pname:samples is
ename:VK_SAMPLE_COUNT_8_BIT, pname:flags must: not contain
ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT
* If the <<features-features-sparseResidency16Samples,sparse residency for
* [[VUID-VkImageCreateInfo-imageType-00976]] If the <<features-features-sparseResidency16Samples,sparse residency for
images with 16 samples>> feature is not enabled, pname:imageType is
ename:VK_IMAGE_TYPE_2D, and pname:samples is
ename:VK_SAMPLE_COUNT_16_BIT, pname:flags must: not contain
ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT
* If pname:tiling is ename:VK_IMAGE_TILING_LINEAR, pname:format must: be a
* [[VUID-VkImageCreateInfo-tiling-00977]] If pname:tiling is ename:VK_IMAGE_TILING_LINEAR, pname:format must: be a
format that has at least one supported feature bit present in the value
of sname:VkFormatProperties::pname:linearTilingFeatures returned by
fname:vkGetPhysicalDeviceFormatProperties with the same value of
pname:format
* If pname:tiling is ename:VK_IMAGE_TILING_LINEAR, and
* [[VUID-VkImageCreateInfo-tiling-00978]] If pname:tiling is ename:VK_IMAGE_TILING_LINEAR, and
sname:VkFormatProperties::pname:linearTilingFeatures (as returned by
fname:vkGetPhysicalDeviceFormatProperties with the same value of
pname:format) does not include
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT, pname:usage must: not contain
ename:VK_IMAGE_USAGE_SAMPLED_BIT
* If pname:tiling is ename:VK_IMAGE_TILING_LINEAR, and
* [[VUID-VkImageCreateInfo-tiling-00979]] If pname:tiling is ename:VK_IMAGE_TILING_LINEAR, and
sname:VkFormatProperties::pname:linearTilingFeatures (as returned by
fname:vkGetPhysicalDeviceFormatProperties with the same value of
pname:format) does not include
ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT, pname:usage must: not contain
ename:VK_IMAGE_USAGE_STORAGE_BIT
* If pname:tiling is ename:VK_IMAGE_TILING_LINEAR, and
* [[VUID-VkImageCreateInfo-tiling-00980]] If pname:tiling is ename:VK_IMAGE_TILING_LINEAR, and
sname:VkFormatProperties::pname:linearTilingFeatures (as returned by
fname:vkGetPhysicalDeviceFormatProperties with the same value of
pname:format) does not include
ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT, pname:usage must: not
contain ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT
* If pname:tiling is ename:VK_IMAGE_TILING_LINEAR, and
* [[VUID-VkImageCreateInfo-tiling-00981]] If pname:tiling is ename:VK_IMAGE_TILING_LINEAR, and
sname:VkFormatProperties::pname:linearTilingFeatures (as returned by
fname:vkGetPhysicalDeviceFormatProperties with the same value of
pname:format) does not include
ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT, pname:usage must:
not contain ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
* If pname:tiling is ename:VK_IMAGE_TILING_OPTIMAL, pname:format must: be
* [[VUID-VkImageCreateInfo-tiling-00982]] If pname:tiling is ename:VK_IMAGE_TILING_OPTIMAL, pname:format must: be
a format that has at least one supported feature bit present in the
value of sname:VkFormatProperties::pname:optimalTilingFeatures returned
by fname:vkGetPhysicalDeviceFormatProperties with the same value of
pname:format
* If pname:tiling is ename:VK_IMAGE_TILING_OPTIMAL, and
* [[VUID-VkImageCreateInfo-tiling-00983]] If pname:tiling is ename:VK_IMAGE_TILING_OPTIMAL, and
sname:VkFormatProperties::pname:optimalTilingFeatures (as returned by
fname:vkGetPhysicalDeviceFormatProperties with the same value of
pname:format) does not include
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT, pname:usage must: not contain
ename:VK_IMAGE_USAGE_SAMPLED_BIT
* If pname:tiling is ename:VK_IMAGE_TILING_OPTIMAL, and
* [[VUID-VkImageCreateInfo-tiling-00984]] If pname:tiling is ename:VK_IMAGE_TILING_OPTIMAL, and
sname:VkFormatProperties::pname:optimalTilingFeatures (as returned by
fname:vkGetPhysicalDeviceFormatProperties with the same value of
pname:format) does not include
ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT, pname:usage must: not contain
ename:VK_IMAGE_USAGE_STORAGE_BIT
* If pname:tiling is ename:VK_IMAGE_TILING_OPTIMAL, and
* [[VUID-VkImageCreateInfo-tiling-00985]] If pname:tiling is ename:VK_IMAGE_TILING_OPTIMAL, and
sname:VkFormatProperties::pname:optimalTilingFeatures (as returned by
fname:vkGetPhysicalDeviceFormatProperties with the same value of
pname:format) does not include
ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT, pname:usage must: not
contain ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT
* If pname:tiling is ename:VK_IMAGE_TILING_OPTIMAL, and
* [[VUID-VkImageCreateInfo-tiling-00986]] If pname:tiling is ename:VK_IMAGE_TILING_OPTIMAL, and
sname:VkFormatProperties::pname:optimalTilingFeatures (as returned by
fname:vkGetPhysicalDeviceFormatProperties with the same value of
pname:format) does not include
ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT, pname:usage must:
not contain ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
* If pname:flags contains ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT or
* [[VUID-VkImageCreateInfo-flags-00987]] If pname:flags contains ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT or
ename:VK_IMAGE_CREATE_SPARSE_ALIASED_BIT, it must: also contain
ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT
ifdef::VK_NV_external_memory+VK_KHX_external_memory[]
* If the pname:pNext chain contains an instance of
* [[VUID-VkImageCreateInfo-pNext-00988]] If the pname:pNext chain contains an instance of
slink:VkExternalMemoryImageCreateInfoNV, it must: not contain an
instance of slink:VkExternalMemoryImageCreateInfoKHX.
endif::VK_NV_external_memory+VK_KHX_external_memory[]
ifdef::VK_KHX_external_memory+VK_NV_dedicated_allocation[]
* If the pname:pNext chain contains an instance of
* [[VUID-VkImageCreateInfo-pNext-00989]] If the pname:pNext chain contains an instance of
sname:VkExternalMemoryImageCreateInfoKHX, and any of the handle types
specified in sname:VkExternalMemoryImageCreateInfoKHX::pname:handleTypes
require a dedicated allocation, as reported by
@ -728,7 +734,7 @@ ifdef::VK_KHX_external_memory+VK_NV_dedicated_allocation[]
pname:dedicatedAllocation field set to ename:VK_TRUE.
endif::VK_KHX_external_memory+VK_NV_dedicated_allocation[]
ifdef::VK_KHX_external_memory[]
* If the pname:pNext chain contains an instance of
* [[VUID-VkImageCreateInfo-pNext-00990]] If the pname:pNext chain contains an instance of
slink:VkExternalMemoryImageCreateInfoKHX, its pname:handleTypes member
must: only contain bits that are also in
slink:VkExternalImageFormatPropertiesKHX::pname:externalMemoryProperties::pname:compatibleHandleTypes,
@ -740,7 +746,7 @@ ifdef::VK_KHX_external_memory[]
specified in slink:VkExternalMemoryImageCreateInfoKHX::pname:handleTypes
endif::VK_KHX_external_memory[]
ifdef::VK_NV_external_memory+VK_NV_external_memory_capabilities[]
* If the pname:pNext chain contains an instance of
* [[VUID-VkImageCreateInfo-pNext-00991]] If the pname:pNext chain contains an instance of
slink:VkExternalMemoryImageCreateInfoNV, its pname:handleTypes member
must: only contain bits that are also in
slink:VkExternalImageFormatPropertiesNV::pname:externalMemoryProperties::pname:compatibleHandleTypes,
@ -751,12 +757,12 @@ ifdef::VK_NV_external_memory+VK_NV_external_memory_capabilities[]
in slink:VkExternalMemoryImageCreateInfoNV::pname:handleTypes
endif::VK_NV_external_memory+VK_NV_external_memory_capabilities[]
ifdef::VK_KHX_device_group[]
* If pname:flags contains ename:VK_IMAGE_CREATE_BIND_SFR_BIT_KHX, then
* [[VUID-VkImageCreateInfo-flags-00992]] If pname:flags contains ename:VK_IMAGE_CREATE_BIND_SFR_BIT_KHX, then
pname:mipLevels must: be one, pname:arrayLayers must: be one,
pname:imageType must: be ename:VK_IMAGE_TYPE_2D, and pname:tiling must:
be ename:VK_IMAGE_TILING_OPTIMAL.
endif::VK_KHX_device_group[]
* pname:initialLayout must: be ename:VK_IMAGE_LAYOUT_UNDEFINED or
* [[VUID-VkImageCreateInfo-initialLayout-00993]] pname:initialLayout must: be ename:VK_IMAGE_LAYOUT_UNDEFINED or
ename:VK_IMAGE_LAYOUT_PREINITIALIZED.
****
@ -789,7 +795,7 @@ other large images may: improve performance on some devices.
.Valid Usage
****
* If pname:dedicatedAllocation is ename:VK_TRUE,
* [[VUID-VkDedicatedAllocationImageCreateInfoNV-dedicatedAllocation-00994]] If pname:dedicatedAllocation is ename:VK_TRUE,
sname:VkImageCreateInfo::pname:flags must: not include
ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT,
ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT, or
@ -863,7 +869,7 @@ include::../api/structs/VkImageSwapchainCreateInfoKHX.txt[]
.Valid Usage
****
* If pname:swapchain is not dlink:VK_NULL_HANDLE, the fields of
* [[VUID-VkImageSwapchainCreateInfoKHX-swapchain-00995]] If pname:swapchain is not dlink:VK_NULL_HANDLE, the fields of
slink:VkImageCreateInfo must: match the
<<swapchain-wsi-image-create-info, implied image creation parameters>>
of the swapchain
@ -1015,9 +1021,9 @@ image.
.Valid Usage
****
* pname:image must: have been created with pname:tiling equal to
* [[VUID-vkGetImageSubresourceLayout-image-00996]] pname:image must: have been created with pname:tiling equal to
ename:VK_IMAGE_TILING_LINEAR
* The pname:aspectMask member of pname:pSubresource must: only have a
* [[VUID-vkGetImageSubresourceLayout-aspectMask-00997]] The pname:aspectMask member of pname:pSubresource must: only have a
single bit set
****
@ -1036,9 +1042,9 @@ include::../api/structs/VkImageSubresource.txt[]
.Valid Usage
****
* pname:mipLevel must: be less than the pname:mipLevels specified in
* [[VUID-VkImageSubresource-mipLevel-00998]] pname:mipLevel must: be less than the pname:mipLevels specified in
slink:VkImageCreateInfo when the image was created
* pname:arrayLayer must: be less than the pname:arrayLayers specified in
* [[VUID-VkImageSubresource-arrayLayer-00999]] pname:arrayLayer must: be less than the pname:arrayLayers specified in
slink:VkImageCreateInfo when the image was created
****
@ -1125,11 +1131,11 @@ include::../api/protos/vkDestroyImage.txt[]
.Valid Usage
****
* All submitted commands that refer to pname:image, either directly or via
* [[VUID-vkDestroyImage-image-01000]] All submitted commands that refer to pname:image, either directly or via
a sname:VkImageView, must: have completed execution
* If sname:VkAllocationCallbacks were provided when pname:image was
* [[VUID-vkDestroyImage-image-01001]] If sname:VkAllocationCallbacks were provided when pname:image was
created, a compatible set of callbacks must: be provided here
* If no sname:VkAllocationCallbacks were provided when pname:image was
* [[VUID-vkDestroyImage-image-01002]] If no sname:VkAllocationCallbacks were provided when pname:image was
created, pname:pAllocator must: be `NULL`
****
@ -1265,6 +1271,10 @@ ifdef::VK_KHR_swapchain[]
A swapchain's image must: be transitioned to this layout before calling
flink:vkQueuePresentKHR, and must: be transitioned away from this layout
after calling flink:vkAcquireNextImageKHR.
ifdef::VK_KHR_shared_presentable_image[]
* ename:VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR: is valid only for shared
presentable images, and must: be used for any usage the image supports.
endif::VK_KHR_shared_presentable_image[]
endif::VK_KHR_swapchain[]
For each mechanism of accessing an image in the API, there is a parameter or
@ -1516,52 +1526,52 @@ endif::VK_KHR_maintenance1[]
.Valid Usage
****
* If pname:image was not created with
* [[VUID-VkImageViewCreateInfo-image-01003]] If pname:image was not created with
ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT then pname:viewType must: not
be ename:VK_IMAGE_VIEW_TYPE_CUBE or ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY
* If the <<features-features-imageCubeArray,image cubemap arrays>> feature
* [[VUID-VkImageViewCreateInfo-viewType-01004]] If the <<features-features-imageCubeArray,image cubemap arrays>> feature
is not enabled, pname:viewType must: not be
ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY
ifdef::VK_KHR_maintenance1[]
* If pname:image was created with ename:VK_IMAGE_TYPE_3D but without
* [[VUID-VkImageViewCreateInfo-image-01005]] If pname:image was created with ename:VK_IMAGE_TYPE_3D but without
ename:VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT_KHR set then
pname:viewType must: not be ename:VK_IMAGE_VIEW_TYPE_2D or
ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY
endif::VK_KHR_maintenance1[]
* If pname:image was created with ename:VK_IMAGE_TILING_LINEAR,
* [[VUID-VkImageViewCreateInfo-image-01006]] If pname:image was created with ename:VK_IMAGE_TILING_LINEAR,
pname:format must: be format that has at least one supported feature bit
present in the value of
sname:VkFormatProperties::pname:linearTilingFeatures returned by
fname:vkGetPhysicalDeviceFormatProperties with the same value of
pname:format
* pname:image must: have been created with a pname:usage value containing
* [[VUID-VkImageViewCreateInfo-image-01007]] pname:image must: have been created with a pname:usage value containing
at least one of ename:VK_IMAGE_USAGE_SAMPLED_BIT,
ename:VK_IMAGE_USAGE_STORAGE_BIT,
ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT,
ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, or
ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT
* If pname:image was created with ename:VK_IMAGE_TILING_LINEAR and
* [[VUID-VkImageViewCreateInfo-image-01008]] If pname:image was created with ename:VK_IMAGE_TILING_LINEAR and
pname:usage containing ename:VK_IMAGE_USAGE_SAMPLED_BIT, pname:format
must: be supported for sampled images, as specified by the
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT flag in
sname:VkFormatProperties::pname:linearTilingFeatures returned by
fname:vkGetPhysicalDeviceFormatProperties with the same value of
pname:format
* If pname:image was created with ename:VK_IMAGE_TILING_LINEAR and
* [[VUID-VkImageViewCreateInfo-image-01009]] If pname:image was created with ename:VK_IMAGE_TILING_LINEAR and
pname:usage containing ename:VK_IMAGE_USAGE_STORAGE_BIT, pname:format
must: be supported for storage images, as specified by the
ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT flag in
sname:VkFormatProperties::pname:linearTilingFeatures returned by
fname:vkGetPhysicalDeviceFormatProperties with the same value of
pname:format
* If pname:image was created with ename:VK_IMAGE_TILING_LINEAR and
* [[VUID-VkImageViewCreateInfo-image-01010]] If pname:image was created with ename:VK_IMAGE_TILING_LINEAR and
pname:usage containing ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT,
pname:format must: be supported for color attachments, as specified by
the ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT flag in
sname:VkFormatProperties::pname:linearTilingFeatures returned by
fname:vkGetPhysicalDeviceFormatProperties with the same value of
pname:format
* If pname:image was created with ename:VK_IMAGE_TILING_LINEAR and
* [[VUID-VkImageViewCreateInfo-image-01011]] If pname:image was created with ename:VK_IMAGE_TILING_LINEAR and
pname:usage containing
ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, pname:format must: be
supported for depth/stencil attachments, as specified by the
@ -1569,34 +1579,34 @@ endif::VK_KHR_maintenance1[]
sname:VkFormatProperties::pname:linearTilingFeatures returned by
fname:vkGetPhysicalDeviceFormatProperties with the same value of
pname:format
* If pname:image was created with ename:VK_IMAGE_TILING_OPTIMAL,
* [[VUID-VkImageViewCreateInfo-image-01012]] If pname:image was created with ename:VK_IMAGE_TILING_OPTIMAL,
pname:format must: be format that has at least one supported feature bit
present in the value of
sname:VkFormatProperties::pname:optimalTilingFeatures returned by
fname:vkGetPhysicalDeviceFormatProperties with the same value of
pname:format
* If pname:image was created with ename:VK_IMAGE_TILING_OPTIMAL and
* [[VUID-VkImageViewCreateInfo-image-01013]] If pname:image was created with ename:VK_IMAGE_TILING_OPTIMAL and
pname:usage containing ename:VK_IMAGE_USAGE_SAMPLED_BIT, pname:format
must: be supported for sampled images, as specified by the
ename:VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT flag in
sname:VkFormatProperties::pname:optimalTilingFeatures returned by
fname:vkGetPhysicalDeviceFormatProperties with the same value of
pname:format
* If pname:image was created with ename:VK_IMAGE_TILING_OPTIMAL and
* [[VUID-VkImageViewCreateInfo-image-01014]] If pname:image was created with ename:VK_IMAGE_TILING_OPTIMAL and
pname:usage containing ename:VK_IMAGE_USAGE_STORAGE_BIT, pname:format
must: be supported for storage images, as specified by the
ename:VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT flag in
sname:VkFormatProperties::pname:optimalTilingFeatures returned by
fname:vkGetPhysicalDeviceFormatProperties with the same value of
pname:format
* If pname:image was created with ename:VK_IMAGE_TILING_OPTIMAL and
* [[VUID-VkImageViewCreateInfo-image-01015]] If pname:image was created with ename:VK_IMAGE_TILING_OPTIMAL and
pname:usage containing ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT,
pname:format must: be supported for color attachments, as specified by
the ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT flag in
sname:VkFormatProperties::pname:optimalTilingFeatures returned by
fname:vkGetPhysicalDeviceFormatProperties with the same value of
pname:format
* If pname:image was created with ename:VK_IMAGE_TILING_OPTIMAL and
* [[VUID-VkImageViewCreateInfo-image-01016]] If pname:image was created with ename:VK_IMAGE_TILING_OPTIMAL and
pname:usage containing
ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, pname:format must: be
supported for depth/stencil attachments, as specified by the
@ -1604,19 +1614,19 @@ endif::VK_KHR_maintenance1[]
sname:VkFormatProperties::pname:optimalTilingFeatures returned by
fname:vkGetPhysicalDeviceFormatProperties with the same value of
pname:format
* pname:subresourceRange must: be a valid image subresource range for
* [[VUID-VkImageViewCreateInfo-subresourceRange-01017]] pname:subresourceRange must: be a valid image subresource range for
pname:image (see <<resources-image-views>>)
* If pname:image was created with the
* [[VUID-VkImageViewCreateInfo-image-01018]] If pname:image was created with the
ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT flag, pname:format must: be
compatible with the pname:format used to create pname:image, as defined
in <<features-formats-compatibility-classes,Format Compatibility
Classes>>
* If pname:image was not created with the
* [[VUID-VkImageViewCreateInfo-image-01019]] If pname:image was not created with the
ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT flag, pname:format must: be
identical to the pname:format used to create pname:image
* If pname:image is non-sparse then it must: be bound completely and
* [[VUID-VkImageViewCreateInfo-image-01020]] If pname:image is non-sparse then it must: be bound completely and
contiguously to a single sname:VkDeviceMemory object
* pname:subResourceRange and pname:viewType must: be compatible with the
* [[VUID-VkImageViewCreateInfo-subResourceRange-01021]] pname:subResourceRange and pname:viewType must: be compatible with the
image, as described in the
<<resources-image-views-compatibility,compatibility table>>
****
@ -1690,20 +1700,20 @@ attachment descriptors, and framebuffer attachments.
.Valid Usage
****
* If pname:levelCount is not ename:VK_REMAINING_MIP_LEVELS,
* [[VUID-VkImageSubresourceRange-levelCount-01022]] If pname:levelCount is not ename:VK_REMAINING_MIP_LEVELS,
[eq]#pname:levelCount# must: be non-zero and [eq]#(pname:baseMipLevel
{plus} pname:levelCount)# must: be less than or equal to the
pname:mipLevels specified in slink:VkImageCreateInfo when the image was
created
ifndef::VK_KHR_maintenance1[]
* If pname:layerCount is not ename:VK_REMAINING_ARRAY_LAYERS,
* [[VUID-VkImageSubresourceRange-layerCount-01023]] If pname:layerCount is not ename:VK_REMAINING_ARRAY_LAYERS,
[eq]#pname:layerCount# must: be non-zero and [eq]#(pname:baseArrayLayer
+ pname:layerCount)# must: be less than or equal to the
pname:arrayLayers specified in slink:VkImageCreateInfo when the image
was created
endif::VK_KHR_maintenance1[]
ifdef::VK_KHR_maintenance1[]
* If the pname:imageType specified in slink:VkImageCreateInfo when the
* [[VUID-VkImageSubresourceRange-imageType-01024]] If the pname:imageType specified in slink:VkImageCreateInfo when the
image was created was ename:VK_IMAGE_TYPE_3D and the image view is
created with the pname:viewType of slink:VkImageViewCreateInfo set to
ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY then pname:layerCount must: be
@ -1711,7 +1721,7 @@ ifdef::VK_KHR_maintenance1[]
non-zero and [eq]#(pname:baseArrayLayer + pname:layerCount)# must: be
less than or equal to the pname:extent.depth specified in
slink:VkImageCreateInfo when the image was created
* If the pname:imageType specified in slink:VkImageCreateInfo when the
* [[VUID-VkImageSubresourceRange-imageType-01025]] If the pname:imageType specified in slink:VkImageCreateInfo when the
image was created was not ename:VK_IMAGE_TYPE_3D or the image view is
not created with the pname:viewType of slink:VkImageViewCreateInfo set
to ename:VK_IMAGE_VIEW_TYPE_2D_ARRAY then pname:layerCount must: be
@ -1793,11 +1803,11 @@ include::../api/protos/vkDestroyImageView.txt[]
.Valid Usage
****
* All submitted commands that refer to pname:imageView must: have
* [[VUID-vkDestroyImageView-imageView-01026]] All submitted commands that refer to pname:imageView must: have
completed execution
* If sname:VkAllocationCallbacks were provided when pname:imageView was
* [[VUID-vkDestroyImageView-imageView-01027]] If sname:VkAllocationCallbacks were provided when pname:imageView was
created, a compatible set of callbacks must: be provided here
* If no sname:VkAllocationCallbacks were provided when pname:imageView was
* [[VUID-vkDestroyImageView-imageView-01028]] If no sname:VkAllocationCallbacks were provided when pname:imageView was
created, pname:pAllocator must: be `NULL`
****
@ -2006,41 +2016,41 @@ endif::VK_KHX_device_group[]
.Valid Usage
****
* pname:buffer must: not already be backed by a memory object
* pname:buffer must: not have been created with any sparse memory binding
* [[VUID-vkBindBufferMemory-buffer-01029]] pname:buffer must: not already be backed by a memory object
* [[VUID-vkBindBufferMemory-buffer-01030]] pname:buffer must: not have been created with any sparse memory binding
flags
* pname:memoryOffset must: be less than the size of pname:memory
* If pname:buffer was created with the
* [[VUID-vkBindBufferMemory-memoryOffset-01031]] pname:memoryOffset must: be less than the size of pname:memory
* [[VUID-vkBindBufferMemory-buffer-01032]] If pname:buffer was created with the
ename:VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT or
ename:VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT, pname:memoryOffset must:
be a multiple of
sname:VkPhysicalDeviceLimits::pname:minTexelBufferOffsetAlignment
* If pname:buffer was created with the
* [[VUID-vkBindBufferMemory-buffer-01033]] If pname:buffer was created with the
ename:VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT, pname:memoryOffset must: be a
multiple of
sname:VkPhysicalDeviceLimits::pname:minUniformBufferOffsetAlignment
* If pname:buffer was created with the
* [[VUID-vkBindBufferMemory-buffer-01034]] If pname:buffer was created with the
ename:VK_BUFFER_USAGE_STORAGE_BUFFER_BIT, pname:memoryOffset must: be a
multiple of
sname:VkPhysicalDeviceLimits::pname:minStorageBufferOffsetAlignment
* pname:memory must: have been allocated using one of the memory types
* [[VUID-vkBindBufferMemory-memory-01035]] pname:memory must: have been allocated using one of the memory types
allowed in the pname:memoryTypeBits member of the
sname:VkMemoryRequirements structure returned from a call to
fname:vkGetBufferMemoryRequirements with pname:buffer
* pname:memoryOffset must: be an integer multiple of the pname:alignment
* [[VUID-vkBindBufferMemory-memoryOffset-01036]] pname:memoryOffset must: be an integer multiple of the pname:alignment
member of the sname:VkMemoryRequirements structure returned from a call
to fname:vkGetBufferMemoryRequirements with pname:buffer
* The pname:size member of the sname:VkMemoryRequirements structure
* [[VUID-vkBindBufferMemory-size-01037]] The pname:size member of the sname:VkMemoryRequirements structure
returned from a call to fname:vkGetBufferMemoryRequirements with
pname:buffer must: be less than or equal to the size of pname:memory
minus pname:memoryOffset
ifdef::VK_NV_dedicated_allocation[]
* If pname:buffer was created with
* [[VUID-vkBindBufferMemory-buffer-01038]] If pname:buffer was created with
sname:VkDedicatedAllocationBufferCreateInfoNV::pname:dedicatedAllocation
equal to ename:VK_TRUE, pname:memory must: have been created with
sname:VkDedicatedAllocationMemoryAllocateInfoNV::pname:buffer equal to
pname:buffer and pname:memoryOffset must: be zero
* If pname:buffer was not created with
* [[VUID-vkBindBufferMemory-buffer-01039]] If pname:buffer was not created with
sname:VkDedicatedAllocationBufferCreateInfoNV::pname:dedicatedAllocation
equal to ename:VK_TRUE, pname:memory must: not have been allocated
dedicated for a specific buffer or image
@ -2109,12 +2119,12 @@ In other words, by default each physical device attaches to instance zero.
.Valid Usage
****
* All valid usage rules from flink:vkBindBufferMemory apply to the
* [[VUID-VkBindBufferMemoryInfoKHX-None-01040]] All valid usage rules from flink:vkBindBufferMemory apply to the
identically named members of sname:VkBindBufferMemoryInfoKHX
* pname:deviceIndexCount must: either be zero or equal to the number of
* [[VUID-VkBindBufferMemoryInfoKHX-deviceIndexCount-01041]] pname:deviceIndexCount must: either be zero or equal to the number of
physical devices in the logical device
* All elements of pname:pDeviceIndices must: be valid device indices
* All instances of memory that are bound to must: have been allocated
* [[VUID-VkBindBufferMemoryInfoKHX-pDeviceIndices-01042]] All elements of pname:pDeviceIndices must: be valid device indices
* [[VUID-VkBindBufferMemoryInfoKHX-None-01043]] All instances of memory that are bound to must: have been allocated
****
include::../validity/structs/VkBindBufferMemoryInfoKHX.txt[]
@ -2147,28 +2157,28 @@ endif::VK_KHX_device_group[]
.Valid Usage
****
* pname:image must: not already be backed by a memory object
* pname:image must: not have been created with any sparse memory binding
* [[VUID-vkBindImageMemory-image-01044]] pname:image must: not already be backed by a memory object
* [[VUID-vkBindImageMemory-image-01045]] pname:image must: not have been created with any sparse memory binding
flags
* pname:memoryOffset must: be less than the size of pname:memory
* pname:memory must: have been allocated using one of the memory types
* [[VUID-vkBindImageMemory-memoryOffset-01046]] pname:memoryOffset must: be less than the size of pname:memory
* [[VUID-vkBindImageMemory-memory-01047]] pname:memory must: have been allocated using one of the memory types
allowed in the pname:memoryTypeBits member of the
sname:VkMemoryRequirements structure returned from a call to
fname:vkGetImageMemoryRequirements with pname:image
* pname:memoryOffset must: be an integer multiple of the pname:alignment
* [[VUID-vkBindImageMemory-memoryOffset-01048]] pname:memoryOffset must: be an integer multiple of the pname:alignment
member of the sname:VkMemoryRequirements structure returned from a call
to fname:vkGetImageMemoryRequirements with pname:image
* The pname:size member of the sname:VkMemoryRequirements structure
* [[VUID-vkBindImageMemory-size-01049]] The pname:size member of the sname:VkMemoryRequirements structure
returned from a call to fname:vkGetImageMemoryRequirements with
pname:image must: be less than or equal to the size of pname:memory
minus pname:memoryOffset
ifdef::VK_NV_dedicated_allocation[]
* If pname:image was created with
* [[VUID-vkBindImageMemory-image-01050]] If pname:image was created with
sname:VkDedicatedAllocationImageCreateInfoNV::pname:dedicatedAllocation
equal to ename:VK_TRUE, pname:memory must: have been created with
sname:VkDedicatedAllocationMemoryAllocateInfoNV::pname:image equal to
pname:image and pname:memoryOffset must: be zero
* If pname:image was not created with
* [[VUID-vkBindImageMemory-image-01051]] If pname:image was not created with
sname:VkDedicatedAllocationImageCreateInfoNV::pname:dedicatedAllocation
equal to ename:VK_TRUE, pname:memory must: not have been allocated
dedicated for a specific buffer or image
@ -2255,38 +2265,38 @@ In other words, by default each physical device attaches to instance zero.
.Valid Usage
****
* All valid usage rules from flink:vkBindImageMemory apply to the
* [[VUID-VkBindImageMemoryInfoKHX-None-01052]] All valid usage rules from flink:vkBindImageMemory apply to the
identically named members of sname:VkBindImageMemoryInfoKHX
* At least one of pname:deviceIndexCount and pname:SFRRectCount must: be
* [[VUID-VkBindImageMemoryInfoKHX-deviceIndexCount-01053]] At least one of pname:deviceIndexCount and pname:SFRRectCount must: be
zero.
* pname:deviceIndexCount must: either be zero or equal to the number of
* [[VUID-VkBindImageMemoryInfoKHX-deviceIndexCount-01054]] pname:deviceIndexCount must: either be zero or equal to the number of
physical devices in the logical device
* All elements of pname:pDeviceIndices must: be valid device indices.
* pname:SFRRectCount must: either be zero or equal to the number of
* [[VUID-VkBindImageMemoryInfoKHX-pDeviceIndices-01055]] All elements of pname:pDeviceIndices must: be valid device indices.
* [[VUID-VkBindImageMemoryInfoKHX-SFRRectCount-01056]] pname:SFRRectCount must: either be zero or equal to the number of
physical devices in the logical device squared
* If pname:SFRRectCount is not zero, then pname:image must: have been
* [[VUID-VkBindImageMemoryInfoKHX-SFRRectCount-01057]] If pname:SFRRectCount is not zero, then pname:image must: have been
created with the ename:VK_IMAGE_CREATE_BIND_SFR_BIT_KHX bit set.
* All elements of pname:pSFRRects must: be valid rectangles contained
* [[VUID-VkBindImageMemoryInfoKHX-pSFRRects-01058]] All elements of pname:pSFRRects must: be valid rectangles contained
within the dimensions of the image
* Elements of pname:pSFRRects that correspond to the same instance of the
* [[VUID-VkBindImageMemoryInfoKHX-pSFRRects-01059]] Elements of pname:pSFRRects that correspond to the same instance of the
image must: not overlap and their union must: cover the entire image.
* For each element of pname:pSFRRects:
** pname:offset.x must: be a multiple of the sparse image block width
* [[VUID-VkBindImageMemoryInfoKHX-pSFRRects-01060]] For each element of pname:pSFRRects:
** [[VUID-VkBindImageMemoryInfoKHX-offset-01061]] pname:offset.x must: be a multiple of the sparse image block width
(sname:VkSparseImageFormatProperties::pname:imageGranularity.width) of
all non-metadata aspects of the image
** pname:extent.width must: either be a multiple of the sparse image block
** [[VUID-VkBindImageMemoryInfoKHX-extent-01062]] pname:extent.width must: either be a multiple of the sparse image block
width of all non-metadata aspects of the image, or else
pname:extent.width + pname:offset.x must: equal the width of the image
subresource
** pname:offset.y must: be a multiple of the sparse image block height
** [[VUID-VkBindImageMemoryInfoKHX-offset-01063]] pname:offset.y must: be a multiple of the sparse image block height
(sname:VkSparseImageFormatProperties::pname:imageGranularity.height) of
all non-metadata aspects of the image
** pname:extent.height must: either be a multiple of the sparse image
** [[VUID-VkBindImageMemoryInfoKHX-extent-01064]] pname:extent.height must: either be a multiple of the sparse image
block height of all non-metadata aspects of the image, or else
pname:extent.height + pname:offset.y must: equal the height of the
image subresource
* All instances of memory that are bound must: have been allocated
* If pname:image was created with a valid swapchain handle in
* [[VUID-VkBindImageMemoryInfoKHX-None-01065]] All instances of memory that are bound must: have been allocated
* [[VUID-VkBindImageMemoryInfoKHX-image-01066]] If pname:image was created with a valid swapchain handle in
slink:VkImageSwapchainCreateInfoKHX::pname:swapchain, then the image
must: be bound to memory from that swapchain (using
slink:VkBindImageMemorySwapchainInfoKHX).
@ -2319,10 +2329,10 @@ pname:pSFRRects members of slink:VkBindImageMemoryInfoKHX.
.Valid Usage
****
* At least one of pname:swapchain and
* [[VUID-VkBindImageMemorySwapchainInfoKHX-swapchain-01067]] At least one of pname:swapchain and
slink:VkBindImageMemoryInfoKHX::pname:memory must: be
dlink:VK_NULL_HANDLE
* pname:imageIndex must: be less than the number of images in
* [[VUID-VkBindImageMemorySwapchainInfoKHX-imageIndex-01068]] pname:imageIndex must: be less than the number of images in
pname:swapchain
****

View File

@ -217,37 +217,37 @@ pname:maxSamplerAllocationCount limit.
.Valid Usage
****
* The absolute value of pname:mipLodBias must: be less than or equal to
* [[VUID-VkSamplerCreateInfo-mipLodBias-01069]] The absolute value of pname:mipLodBias must: be less than or equal to
sname:VkPhysicalDeviceLimits::pname:maxSamplerLodBias
* If the <<features-features-samplerAnisotropy,anisotropic sampling>>
* [[VUID-VkSamplerCreateInfo-anisotropyEnable-01070]] If the <<features-features-samplerAnisotropy,anisotropic sampling>>
feature is not enabled, pname:anisotropyEnable must: be ename:VK_FALSE
* If pname:anisotropyEnable is ename:VK_TRUE, pname:maxAnisotropy must: be
* [[VUID-VkSamplerCreateInfo-anisotropyEnable-01071]] If pname:anisotropyEnable is ename:VK_TRUE, pname:maxAnisotropy must: be
between `1.0` and
sname:VkPhysicalDeviceLimits::pname:maxSamplerAnisotropy, inclusive
* If pname:unnormalizedCoordinates is ename:VK_TRUE, pname:minFilter and
* [[VUID-VkSamplerCreateInfo-unnormalizedCoordinates-01072]] If pname:unnormalizedCoordinates is ename:VK_TRUE, pname:minFilter and
pname:magFilter must: be equal
* If pname:unnormalizedCoordinates is ename:VK_TRUE, pname:mipmapMode
* [[VUID-VkSamplerCreateInfo-unnormalizedCoordinates-01073]] If pname:unnormalizedCoordinates is ename:VK_TRUE, pname:mipmapMode
must: be ename:VK_SAMPLER_MIPMAP_MODE_NEAREST
* If pname:unnormalizedCoordinates is ename:VK_TRUE, pname:minLod and
* [[VUID-VkSamplerCreateInfo-unnormalizedCoordinates-01074]] If pname:unnormalizedCoordinates is ename:VK_TRUE, pname:minLod and
pname:maxLod must: be zero
* If pname:unnormalizedCoordinates is ename:VK_TRUE, pname:addressModeU
* [[VUID-VkSamplerCreateInfo-unnormalizedCoordinates-01075]] If pname:unnormalizedCoordinates is ename:VK_TRUE, pname:addressModeU
and pname:addressModeV must: each be either
ename:VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE or
ename:VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER
* If pname:unnormalizedCoordinates is ename:VK_TRUE,
* [[VUID-VkSamplerCreateInfo-unnormalizedCoordinates-01076]] If pname:unnormalizedCoordinates is ename:VK_TRUE,
pname:anisotropyEnable must: be ename:VK_FALSE
* If pname:unnormalizedCoordinates is ename:VK_TRUE, pname:compareEnable
* [[VUID-VkSamplerCreateInfo-unnormalizedCoordinates-01077]] If pname:unnormalizedCoordinates is ename:VK_TRUE, pname:compareEnable
must: be ename:VK_FALSE
* If any of pname:addressModeU, pname:addressModeV or pname:addressModeW
* [[VUID-VkSamplerCreateInfo-addressModeU-01078]] If any of pname:addressModeU, pname:addressModeV or pname:addressModeW
are ename:VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER, pname:borderColor
must: be a valid elink:VkBorderColor value
* If the +VK_KHR_sampler_mirror_clamp_to_edge+ extension is not enabled,
* [[VUID-VkSamplerCreateInfo-addressModeU-01079]] If the +VK_KHR_sampler_mirror_clamp_to_edge+ extension is not enabled,
pname:addressModeU, pname:addressModeV and pname:addressModeW must: not
be ename:VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE
* If pname:compareEnable is ename:VK_TRUE, pname:compareOp must: be a
* [[VUID-VkSamplerCreateInfo-compareEnable-01080]] If pname:compareEnable is ename:VK_TRUE, pname:compareOp must: be a
valid elink:VkCompareOp value
ifdef::VK_IMG_filter_cubic[]
* If either pname:magFilter or pname:minFilter is
* [[VUID-VkSamplerCreateInfo-magFilter-01081]] If either pname:magFilter or pname:minFilter is
ename:VK_FILTER_CUBIC_IMG, pname:anisotropyEnable must: be
ename:VK_FALSE
endif::VK_IMG_filter_cubic[]
@ -268,11 +268,11 @@ include::../api/protos/vkDestroySampler.txt[]
.Valid Usage
****
* All submitted commands that refer to pname:sampler must: have completed
* [[VUID-vkDestroySampler-sampler-01082]] All submitted commands that refer to pname:sampler must: have completed
execution
* If sname:VkAllocationCallbacks were provided when pname:sampler was
* [[VUID-vkDestroySampler-sampler-01083]] If sname:VkAllocationCallbacks were provided when pname:sampler was
created, a compatible set of callbacks must: be provided here
* If no sname:VkAllocationCallbacks were provided when pname:sampler was
* [[VUID-vkDestroySampler-sampler-01084]] If no sname:VkAllocationCallbacks were provided when pname:sampler was
created, pname:pAllocator must: be `NULL`
****

View File

@ -97,33 +97,34 @@ include::../api/structs/VkShaderModuleCreateInfo.txt[]
.Valid Usage
****
* pname:codeSize must: be greater than 0
* pname:codeSize must: be a multiple of 4
ifdef::VK_NV_glsl_shader[]
unless the +VK_NV_glsl_shader extension+ is enabled, and pname:pCode
references GLSL code, pname:codeSize can be a multiple of 1
endif::VK_NV_glsl_shader[]
* pname:pCode must: point to valid SPIR-V code, formatted and packed as
* [[VUID-VkShaderModuleCreateInfo-codeSize-01085]] pname:codeSize must: be greater than 0
ifndef::VK_NV_glsl_shader[]
* [[VUID-VkShaderModuleCreateInfo-codeSize-01086]] pname:codeSize must: be a multiple of 4
* [[VUID-VkShaderModuleCreateInfo-pCode-01087]] pname:pCode must: point to valid SPIR-V code, formatted and packed as
described by the <<spirv-spec,Khronos SPIR-V Specification>>
ifdef::VK_NV_glsl_shader[]
or, if the +VK_NV_glsl_shader+ extension is enabled, pname:pCode can:
instead reference valid GLSL code which must: be written to the
+GL_KHR_vulkan_glsl+ extension specification
endif::VK_NV_glsl_shader[]
* pname:pCode must: adhere to the validation rules described by the
* [[VUID-VkShaderModuleCreateInfo-pCode-01088]] pname:pCode must: adhere to the validation rules described by the
<<spirvenv-module-validation, Validation Rules within a Module>> section
of the <<spirvenv-capabilities,SPIR-V Environment>> appendix
ifdef::VK_NV_glsl_shader[]
or, if the +VK_NV_glsl_shader+ extension is enabled, pname:pCode can: be
valid GLSL code written to the +GL_KHR_vulkan_glsl+ GLSL extension
specification
endif::VK_NV_glsl_shader[]
* pname:pCode must: declare the code:Shader capability for SPIR-V code
* pname:pCode must: not declare any capability that is not supported by
ifdef::VK_NV_glsl_shader[]
* [[VUID-VkShaderModuleCreateInfo-pCode-01376]] If pname:pCode points to SPIR-V code, pname:codeSize must: be a multiple of 4
* [[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+
extension specification
* [[VUID-VkShaderModuleCreateInfo-pCode-01378]] If pname:pCode points to SPIR-V code, that code must: adhere to the
validation rules described by the
<<spirvenv-module-validation, Validation Rules within a Module>> section
of the <<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
endif::VK_NV_glsl_shader[]
* [[VUID-VkShaderModuleCreateInfo-pCode-01089]] pname:pCode must: declare the code:Shader capability for SPIR-V code
* [[VUID-VkShaderModuleCreateInfo-pCode-01090]] pname:pCode must: not declare any capability that is not supported by
the API, as described by the <<spirvenv-module-validation,
Capabilities>> section of the <<spirvenv-capabilities,SPIR-V
Environment>> appendix
* If pname:pCode declares any of the capabilities that are listed as not
* [[VUID-VkShaderModuleCreateInfo-pCode-01091]] If pname:pCode declares any of the capabilities that are listed as not
required by the implementation, the relevant feature must: be enabled,
as listed in the <<spirvenv-capabilities-table,SPIR-V Environment>>
appendix
@ -147,9 +148,9 @@ are still in use.
.Valid Usage
****
* If sname:VkAllocationCallbacks were provided when pname:shaderModule was
* [[VUID-vkDestroyShaderModule-shaderModule-01092]] If sname:VkAllocationCallbacks were provided when pname:shaderModule was
created, a compatible set of callbacks must: be provided here
* If no sname:VkAllocationCallbacks were provided when pname:shaderModule
* [[VUID-vkDestroyShaderModule-shaderModule-01093]] If no sname:VkAllocationCallbacks were provided when pname:shaderModule
was created, pname:pAllocator must: be `NULL`
****

View File

@ -863,7 +863,7 @@ ename:VK_IMAGE_ASPECT_STENCIL_BIT.
.Valid Usage
****
* pname:samples must: be a bit value that is set in
* [[VUID-vkGetPhysicalDeviceSparseImageFormatProperties-samples-01094]] pname:samples must: be a bit value that is set in
sname:VkImageFormatProperties::pname:sampleCounts returned by
fname:vkGetPhysicalDeviceImageFormatProperties with pname:format,
pname:type, pname:tiling, and pname:usage equal to those in this command
@ -921,7 +921,7 @@ include::../api/structs/VkPhysicalDeviceSparseImageFormatInfo2KHR.txt[]
.Valid Usage
****
* pname:samples must: be a bit value that is set in
* [[VUID-VkPhysicalDeviceSparseImageFormatInfo2KHR-samples-01095]] pname:samples must: be a bit value that is set in
sname:VkImageFormatProperties::pname:sampleCounts returned by
fname:vkGetPhysicalDeviceImageFormatProperties with pname:format,
pname:type, pname:tiling, and pname:usage equal to those in this command
@ -1247,18 +1247,18 @@ the binding range must: be within the range
.Valid Usage
****
* If pname:memory is not dlink:VK_NULL_HANDLE, pname:memory and
* [[VUID-VkSparseMemoryBind-memory-01096]] If pname:memory is not dlink:VK_NULL_HANDLE, pname:memory and
pname:memoryOffset must: match the memory requirements of the resource,
as described in section <<resources-association>>
* If pname:memory is not dlink:VK_NULL_HANDLE, pname:memory must: not have
* [[VUID-VkSparseMemoryBind-memory-01097]] If pname:memory is not dlink:VK_NULL_HANDLE, pname:memory must: not have
been created with a memory type that reports
ename:VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT bit set
* pname:size must: be greater than `0`
* pname:resourceOffset must: be less than the size of the resource
* pname:size must: be less than or equal to the size of the resource minus
* [[VUID-VkSparseMemoryBind-size-01098]] pname:size must: be greater than `0`
* [[VUID-VkSparseMemoryBind-resourceOffset-01099]] pname:resourceOffset must: be less than the size of the resource
* [[VUID-VkSparseMemoryBind-size-01100]] pname:size must: be less than or equal to the size of the resource minus
pname:resourceOffset
* pname:memoryOffset must: be less than the size of pname:memory
* pname:size must: be less than or equal to the size of pname:memory minus
* [[VUID-VkSparseMemoryBind-memoryOffset-01101]] pname:memoryOffset must: be less than the size of pname:memory
* [[VUID-VkSparseMemoryBind-size-01102]] pname:size must: be less than or equal to the size of pname:memory minus
pname:memoryOffset
****
@ -1295,7 +1295,7 @@ include::../api/structs/VkSparseImageOpaqueMemoryBindInfo.txt[]
.Valid Usage
****
* For any given element of pname:pBinds, if the pname:flags member of that
* [[VUID-VkSparseImageOpaqueMemoryBindInfo-pBinds-01103]] For any given element of pname:pBinds, if the pname:flags member of that
element contains ename:VK_SPARSE_MEMORY_BIND_METADATA_BIT, the binding
range defined must: be within the mip tail region of the metadata aspect
of pname:image
@ -1385,31 +1385,31 @@ include::../api/structs/VkSparseImageMemoryBind.txt[]
.Valid Usage
****
* If the <<features-features-sparseResidencyAliased,sparse aliased
* [[VUID-VkSparseImageMemoryBind-memory-01104]] If the <<features-features-sparseResidencyAliased,sparse aliased
residency>> feature is not enabled, and if any other resources are bound
to ranges of pname:memory, the range of pname:memory being bound must:
not overlap with those bound ranges
* pname:memory and pname:memoryOffset must: match the memory requirements
* [[VUID-VkSparseImageMemoryBind-memory-01105]] pname:memory and pname:memoryOffset must: match the memory requirements
of the calling command's pname:image, as described in section
<<resources-association>>
* pname:subresource must: be a valid image subresource for pname:image
* [[VUID-VkSparseImageMemoryBind-subresource-01106]] pname:subresource must: be a valid image subresource for pname:image
(see <<resources-image-views>>)
* pname:offset.x must: be a multiple of the sparse image block width
* [[VUID-VkSparseImageMemoryBind-offset-01107]] pname:offset.x must: be a multiple of the sparse image block width
(sname:VkSparseImageFormatProperties::pname:imageGranularity.width) of
the image
* pname:extent.width must: either be a multiple of the sparse image block
* [[VUID-VkSparseImageMemoryBind-extent-01108]] pname:extent.width must: either be a multiple of the sparse image block
width of the image, or else pname:extent.width + pname:offset.x must:
equal the width of the image subresource
* pname:offset.y must: be a multiple of the sparse image block height
* [[VUID-VkSparseImageMemoryBind-offset-01109]] pname:offset.y must: be a multiple of the sparse image block height
(sname:VkSparseImageFormatProperties::pname:imageGranularity.height) of
the image
* pname:extent.height must: either be a multiple of the sparse image block
* [[VUID-VkSparseImageMemoryBind-extent-01110]] pname:extent.height must: either be a multiple of the sparse image block
height of the image, or else pname:extent.height + pname:offset.y must:
equal the height of the image subresource
* pname:offset.z must: be a multiple of the sparse image block depth
* [[VUID-VkSparseImageMemoryBind-offset-01111]] pname:offset.z must: be a multiple of the sparse image block depth
(sname:VkSparseImageFormatProperties::pname:imageGranularity.depth) of
the image
* pname:extent.depth must: either be a multiple of the sparse image block
* [[VUID-VkSparseImageMemoryBind-extent-01112]] pname:extent.depth must: either be a multiple of the sparse image block
depth of the image, or else pname:extent.depth + pname:offset.z must:
equal the depth of the image subresource
****
@ -1455,18 +1455,18 @@ Additional information about fence and semaphore operation is described in
.Valid Usage
****
* If pname:fence is not dlink:VK_NULL_HANDLE, pname:fence must: be
* [[VUID-vkQueueBindSparse-fence-01113]] If pname:fence is not dlink:VK_NULL_HANDLE, pname:fence must: be
unsignaled
* If pname:fence is not dlink:VK_NULL_HANDLE, pname:fence must: not be
* [[VUID-vkQueueBindSparse-fence-01114]] If pname:fence is not dlink:VK_NULL_HANDLE, pname:fence must: not be
associated with any other queue command that has not yet completed
execution on that queue
* Any given element of the pname:pSignalSemaphores member of any element
* [[VUID-vkQueueBindSparse-pSignalSemaphores-01115]] Any given element of the pname:pSignalSemaphores member of any element
of pname:pBindInfo must: be unsignaled when the semaphore signal
operation it defines is executed on the device
* When a semaphore unsignal operation defined by any element of the
* [[VUID-vkQueueBindSparse-pWaitSemaphores-01116]] When a semaphore unsignal operation defined by any element of the
pname:pWaitSemaphores member of any element of pname:pBindInfo executes
on pname:queue, no other queue must: be waiting on the same semaphore.
* All elements of the pname:pWaitSemaphores member of all elements of
* [[VUID-vkQueueBindSparse-pWaitSemaphores-01117]] All elements of the pname:pWaitSemaphores member of all elements of
pname:pBindInfo must: be semaphores that are signaled, or have
<<synchronization-semaphores-signaling, semaphore signal operations>>
previously submitted for execution.
@ -1543,9 +1543,9 @@ pname:memoryDeviceIndex are assumed to be zero.
.Valid Usage
****
* pname:resourceDeviceIndex and pname:memoryDeviceIndex must: both be
* [[VUID-VkDeviceGroupBindSparseInfoKHX-resourceDeviceIndex-01118]] pname:resourceDeviceIndex and pname:memoryDeviceIndex must: both be
valid device indices.
* Each memory allocation bound in this batch must: have allocated an
* [[VUID-VkDeviceGroupBindSparseInfoKHX-memoryDeviceIndex-01119]] Each memory allocation bound in this batch must: have allocated an
instance for pname:memoryDeviceIndex.
****

View File

@ -945,11 +945,11 @@ include::../api/protos/vkDestroyFence.txt[]
.Valid Usage
****
* All <<devsandqueues-submission, queue submission>> commands that refer
* [[VUID-vkDestroyFence-fence-01120]] All <<devsandqueues-submission, queue submission>> commands that refer
to pname:fence must: have completed execution
* If sname:VkAllocationCallbacks were provided when pname:fence was
* [[VUID-vkDestroyFence-fence-01121]] If sname:VkAllocationCallbacks were provided when pname:fence was
created, a compatible set of callbacks must: be provided here
* If no sname:VkAllocationCallbacks were provided when pname:fence was
* [[VUID-vkDestroyFence-fence-01122]] If no sname:VkAllocationCallbacks were provided when pname:fence was
created, pname:pAllocator must: be `NULL`
****
@ -1008,7 +1008,7 @@ that fence.
.Valid Usage
****
* Any given element of pname:pFences must: not currently be associated
* [[VUID-vkResetFences-pFences-01123]] Any given element of pname:pFences must: not currently be associated
with any queue command that has not yet completed execution on that
queue
****
@ -1194,7 +1194,7 @@ include::../api/structs/VkExportSemaphoreCreateInfoKHX.txt[]
.Valid Usage
****
* The bits in pname:handleTypes must: be supported and compatible, as
* [[VUID-VkExportSemaphoreCreateInfoKHX-handleTypes-01124]] The bits in pname:handleTypes must: be supported and compatible, as
reported by slink:VkExternalSemaphorePropertiesKHX.
****
@ -1247,7 +1247,7 @@ ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT_KHX
.Valid Usage
****
* If slink:VkExportSemaphoreCreateInfoKHX::pname:handleTypes does not
* [[VUID-VkExportSemaphoreWin32HandleInfoKHX-handleTypes-01125]] If slink:VkExportSemaphoreCreateInfoKHX::pname:handleTypes does not
include ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHX or
VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT_KHX,
VkExportSemaphoreWin32HandleInfoKHX must: not be in the pname:pNext
@ -1280,26 +1280,26 @@ using the fname:CloseHandle system call when they are no longer needed.
.Valid Usage
****
* pname:handleType must: have been included in
* [[VUID-vkGetSemaphoreWin32HandleKHX-handleType-01126]] pname:handleType must: have been included in
slink:VkExportSemaphoreCreateInfoKHX::pname:handleTypes when
pname:semaphore's current state was created.
* If pname:handleType is defined as an NT handle,
* [[VUID-vkGetSemaphoreWin32HandleKHX-handleType-01127]] If pname:handleType is defined as an NT handle,
flink:vkGetSemaphoreWin32HandleKHX must: be called no more than once for
each valid unique combination of pname:semaphore and pname:handleType.
* pname:semaphore must: not currently have its state replaced by imported
* [[VUID-vkGetSemaphoreWin32HandleKHX-semaphore-01128]] pname:semaphore must: not currently have its state replaced by imported
semaphore state as described below in
<<synchronization-semaphores-importing,Importing Semaphore State>>
unless that imported semaphore state's handle type was included in
slink:VkExternalSemaphorePropertiesKHX::pname:exportFromImportedHandleTypes.
* If pname:handleType refers to a handle type with temporary import
* [[VUID-vkGetSemaphoreWin32HandleKHX-handleType-01129]] If pname:handleType refers to a handle type with temporary import
semantics, as defined below in
<<synchronization-semaphores-importing,Importing Semaphore State>>,
there must: be no queue waiting on pname:semaphore.
* If pname:handleType refers to a handle type with temporary import
* [[VUID-vkGetSemaphoreWin32HandleKHX-handleType-01130]] If pname:handleType refers to a handle type with temporary import
semantics, pname:semaphore must: be signaled, or have an associated
<<synchronization-semaphores-signaling,semaphore signal operation>>
pending execution.
* pname:handleType must: be defined as an NT handle or a global share
* [[VUID-vkGetSemaphoreWin32HandleKHX-handleType-01131]] pname:handleType must: be defined as an NT handle or a global share
handle.
****
@ -1335,23 +1335,23 @@ needed, or by importing Vulkan semaphore state from it.
.Valid Usage
****
* pname:handleType must: have been included in
* [[VUID-vkGetSemaphoreFdKHX-handleType-01132]] pname:handleType must: have been included in
slink:VkExportSemaphoreCreateInfoKHX::pname:handleTypes when
pname:semaphore's current state was created.
* pname:semaphore must: not currently have its state replaced by imported
* [[VUID-vkGetSemaphoreFdKHX-semaphore-01133]] pname:semaphore must: not currently have its state replaced by imported
semaphore state as described below in
<<synchronization-semaphores-importing,Importing Semaphore State>>
unless that imported semaphore state's handle type was included in
slink:VkExternalSemaphorePropertiesKHX::pname:exportFromImportedHandleTypes.
* If pname:handleType refers to a handle type with temporary import
* [[VUID-vkGetSemaphoreFdKHX-handleType-01134]] If pname:handleType refers to a handle type with temporary import
semantics, as defined below in
<<synchronization-semaphores-importing,Importing Semaphore State>>,
there must: be no queue waiting on pname:semaphore.
* If pname:handleType refers to a handle type with temporary import
* [[VUID-vkGetSemaphoreFdKHX-handleType-01135]] If pname:handleType refers to a handle type with temporary import
semantics, pname:semaphore must: be signaled, or have an associated
<<synchronization-semaphores-signaling,semaphore signal operation>>
pending execution.
* pname:handleType must: be defined as a POSIX file descriptor handle.
* [[VUID-vkGetSemaphoreFdKHX-handleType-01136]] pname:handleType must: be defined as a POSIX file descriptor handle.
****
include::../validity/protos/vkGetSemaphoreFdKHX.txt[]
@ -1371,11 +1371,11 @@ include::../api/protos/vkDestroySemaphore.txt[]
.Valid Usage
****
* All submitted batches that refer to pname:semaphore must: have completed
* [[VUID-vkDestroySemaphore-semaphore-01137]] All submitted batches that refer to pname:semaphore must: have completed
execution
* If sname:VkAllocationCallbacks were provided when pname:semaphore was
* [[VUID-vkDestroySemaphore-semaphore-01138]] If sname:VkAllocationCallbacks were provided when pname:semaphore was
created, a compatible set of callbacks must: be provided here
* If no sname:VkAllocationCallbacks were provided when pname:semaphore was
* [[VUID-vkDestroySemaphore-semaphore-01139]] If no sname:VkAllocationCallbacks were provided when pname:semaphore was
created, pname:pAllocator must: be `NULL`
****
@ -1644,10 +1644,10 @@ The handle types supported by pname:handleType are:
.Valid Usage
****
* pname:handleType must: be a value included in the
* [[VUID-VkImportSemaphoreWin32HandleInfoKHX-handleType-01140]] pname:handleType must: be a value included in the
<<synchronization-handletypes-win32,Handle Type Permanence for
VkImportSemaphoreWin32HandleInfoKHX>> table.
* The semaphore from which pname:handleType was exported must: have been
* [[VUID-VkImportSemaphoreWin32HandleInfoKHX-handleType-01141]] The semaphore from which pname:handleType was exported must: have been
created on the same underlying physical device as pname:semaphore.
****
@ -1675,7 +1675,7 @@ after a successful import.
.Valid Usage
****
* pname:semaphore must: not be associated with any queue command that has
* [[VUID-vkImportSemaphoreFdKHX-semaphore-01142]] pname:semaphore must: not be associated with any queue command that has
not yet completed execution on that queue
****
@ -1704,10 +1704,10 @@ The handle types supported by pname:handleType are:
.Valid Usage
****
* pname:handleType must: be a value included in the
* [[VUID-VkImportSemaphoreFdInfoKHX-handleType-01143]] pname:handleType must: be a value included in the
<<synchronization-handletypes-fd,Handle Type Permanence for
VkImportSemaphoreFdInfoKHX>> table.
* The semaphore from which pname:handleType was exported must: have been
* [[VUID-VkImportSemaphoreFdInfoKHX-handleType-01144]] The semaphore from which pname:handleType was exported must: have been
created on the same underlying physical device as pname:semaphore.
****
@ -1782,11 +1782,11 @@ include::../api/protos/vkDestroyEvent.txt[]
.Valid Usage
****
* All submitted commands that refer to pname:event must: have completed
* [[VUID-vkDestroyEvent-event-01145]] All submitted commands that refer to pname:event must: have completed
execution
* If sname:VkAllocationCallbacks were provided when pname:event was
* [[VUID-vkDestroyEvent-event-01146]] If sname:VkAllocationCallbacks were provided when pname:event was
created, a compatible set of callbacks must: be provided here
* If no sname:VkAllocationCallbacks were provided when pname:event was
* [[VUID-vkDestroyEvent-event-01147]] If no sname:VkAllocationCallbacks were provided when pname:event was
created, pname:pAllocator must: be `NULL`
****
@ -1862,7 +1862,7 @@ operation occurs.
.Valid Usage
****
* pname:event must: not be waited on by a fname:vkCmdWaitEvents command
* [[VUID-vkResetEvent-event-01148]] pname:event must: not be waited on by a fname:vkCmdWaitEvents command
that is currently executing
****
@ -1905,16 +1905,16 @@ signal operation occurs, and no execution dependency is generated.
.Valid Usage
****
* pname:stageMask must: not include ename:VK_PIPELINE_STAGE_HOST_BIT
* If the <<features-features-geometryShader,geometry shaders>> feature is
* [[VUID-vkCmdSetEvent-stageMask-01149]] pname:stageMask must: not include ename:VK_PIPELINE_STAGE_HOST_BIT
* [[VUID-vkCmdSetEvent-stageMask-01150]] If the <<features-features-geometryShader,geometry shaders>> feature is
not enabled, pname:stageMask must: not contain
ename:VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT
* If the <<features-features-tessellationShader,tessellation shaders>>
* [[VUID-vkCmdSetEvent-stageMask-01151]] If the <<features-features-tessellationShader,tessellation shaders>>
feature is not enabled, pname:stageMask must: not contain
ename:VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT or
ename:VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT
ifdef::VK_KHX_device_group[]
* pname:commandBuffer's current device mask must: include exactly one
* [[VUID-vkCmdSetEvent-commandBuffer-01152]] pname:commandBuffer's current device mask must: include exactly one
physical device.
endif::VK_KHX_device_group[]
****
@ -1954,18 +1954,18 @@ event unsignal operation occurs, and no execution dependency is generated.
.Valid Usage
****
* pname:stageMask must: not include ename:VK_PIPELINE_STAGE_HOST_BIT
* If the <<features-features-geometryShader,geometry shaders>> feature is
* [[VUID-vkCmdResetEvent-stageMask-01153]] pname:stageMask must: not include ename:VK_PIPELINE_STAGE_HOST_BIT
* [[VUID-vkCmdResetEvent-stageMask-01154]] If the <<features-features-geometryShader,geometry shaders>> feature is
not enabled, pname:stageMask must: not contain
ename:VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT
* If the <<features-features-tessellationShader,tessellation shaders>>
* [[VUID-vkCmdResetEvent-stageMask-01155]] If the <<features-features-tessellationShader,tessellation shaders>>
feature is not enabled, pname:stageMask must: not contain
ename:VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT or
ename:VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT
* When this command executes, pname:event must: not be waited on by a
* [[VUID-vkCmdResetEvent-event-01156]] When this command executes, pname:event must: not be waited on by a
fname:vkCmdWaitEvents command that is currently executing
ifdef::VK_KHX_device_group[]
* pname:commandBuffer's current device mask must: include exactly one
* [[VUID-vkCmdResetEvent-commandBuffer-01157]] pname:commandBuffer's current device mask must: include exactly one
physical device.
endif::VK_KHX_device_group[]
****
@ -2068,49 +2068,49 @@ semaphore).
.Valid Usage
****
* pname:srcStageMask must: be the bitwise OR of the pname:stageMask
* [[VUID-vkCmdWaitEvents-srcStageMask-01158]] pname:srcStageMask must: be the bitwise OR of the pname:stageMask
parameter used in previous calls to fname:vkCmdSetEvent with any of the
members of pname:pEvents and ename:VK_PIPELINE_STAGE_HOST_BIT if any of
the members of pname:pEvents was set using fname:vkSetEvent
* If the <<features-features-geometryShader,geometry shaders>> feature is
* [[VUID-vkCmdWaitEvents-srcStageMask-01159]] If the <<features-features-geometryShader,geometry shaders>> feature is
not enabled, pname:srcStageMask must: not contain
ename:VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT
* If the <<features-features-geometryShader,geometry shaders>> feature is
* [[VUID-vkCmdWaitEvents-dstStageMask-01160]] If the <<features-features-geometryShader,geometry shaders>> feature is
not enabled, pname:dstStageMask must: not contain
ename:VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT
* If the <<features-features-tessellationShader,tessellation shaders>>
* [[VUID-vkCmdWaitEvents-srcStageMask-01161]] If the <<features-features-tessellationShader,tessellation shaders>>
feature is not enabled, pname:srcStageMask must: not contain
ename:VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT or
ename:VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT
* If the <<features-features-tessellationShader,tessellation shaders>>
* [[VUID-vkCmdWaitEvents-dstStageMask-01162]] If the <<features-features-tessellationShader,tessellation shaders>>
feature is not enabled, pname:dstStageMask must: not contain
ename:VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT or
ename:VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT
* If pname:pEvents includes one or more events that will be signaled by
* [[VUID-vkCmdWaitEvents-pEvents-01163]] If pname:pEvents includes one or more events that will be signaled by
fname:vkSetEvent after pname:commandBuffer has been submitted to a
queue, then fname:vkCmdWaitEvents must: not be called inside a render
pass instance
* Any pipeline stage included in pname:srcStageMask or pname:dstStageMask
* [[VUID-vkCmdWaitEvents-srcStageMask-01164]] Any pipeline stage included in pname:srcStageMask or pname:dstStageMask
must: be supported by the capabilities of the queue family specified by
the pname:queueFamilyIndex member of the slink:VkCommandPoolCreateInfo
structure that was used to create the sname:VkCommandPool that
pname:commandBuffer was allocated from, as specified in the
<<synchronization-pipeline-stages-supported, table of supported pipeline
stages>>.
* Any given element of pname:pMemoryBarriers, pname:pBufferMemoryBarriers
* [[VUID-vkCmdWaitEvents-pMemoryBarriers-01165]] Any given element of pname:pMemoryBarriers, pname:pBufferMemoryBarriers
or pname:pImageMemoryBarriers must: not have any access flag included in
its pname:srcAccessMask member if that bit is not supported by any of
the pipeline stages in pname:srcStageMask, as specified in the
<<synchronization-access-types-supported, table of supported access
types>>.
* Any given element of pname:pMemoryBarriers, pname:pBufferMemoryBarriers
* [[VUID-vkCmdWaitEvents-pMemoryBarriers-01166]] Any given element of pname:pMemoryBarriers, pname:pBufferMemoryBarriers
or pname:pImageMemoryBarriers must: not have any access flag included in
its pname:dstAccessMask member if that bit is not supported by any of
the pipeline stages in pname:dstStageMask, as specified in the
<<synchronization-access-types-supported, table of supported access
types>>.
ifdef::VK_KHX_device_group[]
* pname:commandBuffer's current device mask must: include exactly one
* [[VUID-vkCmdWaitEvents-commandBuffer-01167]] pname:commandBuffer's current device mask must: include exactly one
physical device.
endif::VK_KHX_device_group[]
****
@ -2226,42 +2226,42 @@ framebuffer-space>> pipeline stages is
.Valid Usage
****
* If the <<features-features-geometryShader,geometry shaders>> feature is
* [[VUID-vkCmdPipelineBarrier-srcStageMask-01168]] If the <<features-features-geometryShader,geometry shaders>> feature is
not enabled, pname:srcStageMask must: not contain
ename:VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT
* If the <<features-features-geometryShader,geometry shaders>> feature is
* [[VUID-vkCmdPipelineBarrier-dstStageMask-01169]] If the <<features-features-geometryShader,geometry shaders>> feature is
not enabled, pname:dstStageMask must: not contain
ename:VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT
* If the <<features-features-tessellationShader,tessellation shaders>>
* [[VUID-vkCmdPipelineBarrier-srcStageMask-01170]] If the <<features-features-tessellationShader,tessellation shaders>>
feature is not enabled, pname:srcStageMask must: not contain
ename:VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT or
ename:VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT
* If the <<features-features-tessellationShader,tessellation shaders>>
* [[VUID-vkCmdPipelineBarrier-dstStageMask-01171]] If the <<features-features-tessellationShader,tessellation shaders>>
feature is not enabled, pname:dstStageMask must: not contain
ename:VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT or
ename:VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT
* If fname:vkCmdPipelineBarrier is called within a render pass instance,
* [[VUID-vkCmdPipelineBarrier-pDependencies-01172]] If fname:vkCmdPipelineBarrier is called within a render pass instance,
the render pass must: have been created with a sname:VkSubpassDependency
instance in pname:pDependencies that expresses a dependency from the
current subpass to itself.
Additionally:
** pname:srcStageMask must: contain a subset of the bit values in the
** [[VUID-vkCmdPipelineBarrier-srcStageMask-01173]] pname:srcStageMask must: contain a subset of the bit values in the
pname:srcStageMask member of that instance of sname:VkSubpassDependency
** pname:dstStageMask must: contain a subset of the bit values in the
** [[VUID-vkCmdPipelineBarrier-dstStageMask-01174]] pname:dstStageMask must: contain a subset of the bit values in the
pname:dstStageMask member of that instance of sname:VkSubpassDependency
** The pname:srcAccessMask of any element of pname:pMemoryBarriers or
** [[VUID-vkCmdPipelineBarrier-srcAccessMask-01175]] The pname:srcAccessMask of any element of pname:pMemoryBarriers or
pname:pImageMemoryBarriers must: contain a subset of the bit values the
pname:srcAccessMask member of that instance of
sname:VkSubpassDependency
** The pname:dstAccessMask of any element of pname:pMemoryBarriers or
** [[VUID-vkCmdPipelineBarrier-dstAccessMask-01176]] The pname:dstAccessMask of any element of pname:pMemoryBarriers or
pname:pImageMemoryBarriers must: contain a subset of the bit values the
pname:dstAccessMask member of that instance of
sname:VkSubpassDependency
** pname:dependencyFlags must: be equal to the pname:dependencyFlags
** [[VUID-vkCmdPipelineBarrier-dependencyFlags-01177]] pname:dependencyFlags must: be equal to the pname:dependencyFlags
member of that instance of sname:VkSubpassDependency
* If fname:vkCmdPipelineBarrier is called within a render pass instance,
* [[VUID-vkCmdPipelineBarrier-bufferMemoryBarrierCount-01178]] If fname:vkCmdPipelineBarrier is called within a render pass instance,
pname:bufferMemoryBarrierCount must: be `0`
* If fname:vkCmdPipelineBarrier is called within a render pass instance,
* [[VUID-vkCmdPipelineBarrier-image-01179]] If fname:vkCmdPipelineBarrier is called within a render pass instance,
the pname:image member of any element of pname:pImageMemoryBarriers
must: be equal to one of the elements of pname:pAttachments that the
current pname:framebuffer was created with, that is also referred to by
@ -2269,41 +2269,41 @@ framebuffer-space>> pipeline stages is
pname:pResolveAttachments or pname:pDepthStencilAttachment members of
the sname:VkSubpassDescription instance that the current subpass was
created with
* If fname:vkCmdPipelineBarrier is called within a render pass instance,
* [[VUID-vkCmdPipelineBarrier-oldLayout-01180]] If fname:vkCmdPipelineBarrier is called within a render pass instance,
the pname:oldLayout and pname:newLayout members of any element of
pname:pImageMemoryBarriers must: be equal to the pname:layout member of
an element of the pname:pColorAttachments, pname:pResolveAttachments or
pname:pDepthStencilAttachment members of the sname:VkSubpassDescription
instance that the current subpass was created with, that refers to the
same pname:image
* If fname:vkCmdPipelineBarrier is called within a render pass instance,
* [[VUID-vkCmdPipelineBarrier-oldLayout-01181]] If fname:vkCmdPipelineBarrier is called within a render pass instance,
the pname:oldLayout and pname:newLayout members of an element of
pname:pImageMemoryBarriers must: be equal
* If fname:vkCmdPipelineBarrier is called within a render pass instance,
* [[VUID-vkCmdPipelineBarrier-srcQueueFamilyIndex-01182]] If fname:vkCmdPipelineBarrier is called within a render pass instance,
the pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex members of
any element of pname:pImageMemoryBarriers must: be
ename:VK_QUEUE_FAMILY_IGNORED
* Any pipeline stage included in pname:srcStageMask or pname:dstStageMask
* [[VUID-vkCmdPipelineBarrier-srcStageMask-01183]] Any pipeline stage included in pname:srcStageMask or pname:dstStageMask
must: be supported by the capabilities of the queue family specified by
the pname:queueFamilyIndex member of the slink:VkCommandPoolCreateInfo
structure that was used to create the sname:VkCommandPool that
pname:commandBuffer was allocated from, as specified in the
<<synchronization-pipeline-stages-supported, table of supported pipeline
stages>>.
* Any given element of pname:pMemoryBarriers, pname:pBufferMemoryBarriers
* [[VUID-vkCmdPipelineBarrier-pMemoryBarriers-01184]] Any given element of pname:pMemoryBarriers, pname:pBufferMemoryBarriers
or pname:pImageMemoryBarriers must: not have any access flag included in
its pname:srcAccessMask member if that bit is not supported by any of
the pipeline stages in pname:srcStageMask, as specified in the
<<synchronization-access-types-supported, table of supported access
types>>.
* Any given element of pname:pMemoryBarriers, pname:pBufferMemoryBarriers
* [[VUID-vkCmdPipelineBarrier-pMemoryBarriers-01185]] Any given element of pname:pMemoryBarriers, pname:pBufferMemoryBarriers
or pname:pImageMemoryBarriers must: not have any access flag included in
its pname:dstAccessMask member if that bit is not supported by any of
the pipeline stages in pname:dstStageMask, as specified in the
<<synchronization-access-types-supported, table of supported access
types>>.
ifdef::VK_KHX_multiview[]
* If fname:vkCmdPipelineBarrier is called outside of a render pass
* [[VUID-vkCmdPipelineBarrier-dependencyFlags-01186]] If fname:vkCmdPipelineBarrier is called outside of a render pass
instance, pname:dependencyFlags must: not include
ename:VK_DEPENDENCY_VIEW_LOCAL_BIT_KHX
endif::VK_KHX_multiview[]
@ -2471,45 +2471,49 @@ access scope includes no access, as if pname:srcAccessMask was `0`.
.Valid Usage
****
* pname:offset must: be less than the size of pname:buffer
* If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:size must: be
* [[VUID-VkBufferMemoryBarrier-offset-01187]] pname:offset must: be less than the size of pname:buffer
* [[VUID-VkBufferMemoryBarrier-size-01188]] If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:size must: be
greater than `0`
* If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:size must: be
* [[VUID-VkBufferMemoryBarrier-size-01189]] If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:size must: be
less than or equal to than the size of pname:buffer minus pname:offset
* If pname:buffer was created with a sharing mode of
ifndef::VK_KHX_external_memory[]
* [[VUID-VkBufferMemoryBarrier-buffer-01190]] If pname:buffer was created with a sharing mode of
ename:VK_SHARING_MODE_CONCURRENT, pname:srcQueueFamilyIndex and
pname:dstQueueFamilyIndex must: both be ename:VK_QUEUE_FAMILY_IGNORED
* If pname:buffer was created with a sharing mode of
endif::VK_KHX_external_memory[]
ifdef::VK_KHX_external_memory[]
* [[VUID-VkBufferMemoryBarrier-buffer-01191]] If pname:buffer was created with a sharing mode of
ename:VK_SHARING_MODE_CONCURRENT, at least one of
pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex must: be
ename:VK_QUEUE_FAMILY_IGNORED
* [[VUID-VkBufferMemoryBarrier-buffer-01380]] If pname:buffer was created with a sharing mode of
ename:VK_SHARING_MODE_CONCURRENT, and one of pname:srcQueueFamilyIndex
and pname:dstQueueFamilyIndex is ename:VK_QUEUE_FAMILY_IGNORED, the
other must: be ename:VK_QUEUE_FAMILY_IGNORED or
ename:VK_QUEUE_FAMILY_EXTERNAL_KHX
endif::VK_KHX_external_memory[]
ifndef::VK_KHX_external_memory[]
* [[VUID-VkBufferMemoryBarrier-buffer-01192]] If pname:buffer was created with a sharing mode of
ename:VK_SHARING_MODE_EXCLUSIVE, pname:srcQueueFamilyIndex and
pname:dstQueueFamilyIndex must: either both be
ename:VK_QUEUE_FAMILY_IGNORED, or both be a valid queue family (see
<<devsandqueues-queueprops>>)
ifdef::VK_KHX_external_memory[]
unless one of them is ename:VK_QUEUE_FAMILY_EXTERNAL_KHX and the other
is ename:VK_QUEUE_FAMILY_IGNORED.
endif::VK_KHX_external_memory[]
ifndef::VK_KHX_external_memory[]
* If pname:buffer was created with a sharing mode of
ename:VK_SHARING_MODE_EXCLUSIVE, pname:srcQueueFamilyIndex and
pname:dstQueueFamilyIndex must: either both be
ename:VK_QUEUE_FAMILY_IGNORED, or both be a valid queue family (see
<<devsandqueues-queueprops>>).
endif::VK_KHX_external_memory[]
ifdef::VK_KHX_external_memory[]
* If pname:buffer was created with a sharing mode of
* [[VUID-VkBufferMemoryBarrier-buffer-01193]] If pname:buffer was created with a sharing mode of
ename:VK_SHARING_MODE_EXCLUSIVE and pname:srcQueueFamilyIndex is
ename:VK_QUEUE_FAMILY_IGNORED, pname:dstQueueFamilyIndex must: also be
ename:VK_QUEUE_FAMILY_IGNORED.
* If pname:buffer was created with a sharing mode of
ename:VK_QUEUE_FAMILY_IGNORED
* [[VUID-VkBufferMemoryBarrier-buffer-01194]] If pname:buffer was created with a sharing mode of
ename:VK_SHARING_MODE_EXCLUSIVE and pname:srcQueueFamilyIndex is not
ename:VK_QUEUE_FAMILY_IGNORED, it must: be a valid queue family or
VK_QUEUE_FAMILY_EXTERNAL_KHX (see <<devsandqueues-queueprops>>).
* If pname:buffer was created with a sharing mode of
VK_QUEUE_FAMILY_EXTERNAL_KHX (see <<devsandqueues-queueprops>>)
* [[VUID-VkBufferMemoryBarrier-buffer-01195]] If pname:buffer was created with a sharing mode of
ename:VK_SHARING_MODE_EXCLUSIVE and pname:dstQueueFamilyIndex is not
ename:VK_QUEUE_FAMILY_IGNORED, it must: be a valid queue family or
VK_QUEUE_FAMILY_EXTERNAL_KHX (see <<devsandqueues-queueprops>>).
VK_QUEUE_FAMILY_EXTERNAL_KHX (see <<devsandqueues-queueprops>>)
endif::VK_KHX_external_memory[]
* If pname:buffer was created with a sharing mode of
* [[VUID-VkBufferMemoryBarrier-buffer-01196]] If pname:buffer was created with a sharing mode of
ename:VK_SHARING_MODE_EXCLUSIVE, and pname:srcQueueFamilyIndex and
pname:dstQueueFamilyIndex are valid queue families, at least one of them
must: be the same as the family of the queue that will execute this
@ -2601,73 +2605,82 @@ transition to all layout transitions previously submitted to the same queue.
.Valid Usage
****
* pname:oldLayout must: be ename:VK_IMAGE_LAYOUT_UNDEFINED or the current
* [[VUID-VkImageMemoryBarrier-oldLayout-01197]] pname:oldLayout must: be ename:VK_IMAGE_LAYOUT_UNDEFINED or the current
layout of the image subresources affected by the barrier
* pname:newLayout must: not be ename:VK_IMAGE_LAYOUT_UNDEFINED or
* [[VUID-VkImageMemoryBarrier-newLayout-01198]] pname:newLayout must: not be ename:VK_IMAGE_LAYOUT_UNDEFINED or
ename:VK_IMAGE_LAYOUT_PREINITIALIZED
* If pname:image was created with a sharing mode of
ifndef::VK_KHX_external_memory[]
* [[VUID-VkImageMemoryBarrier-image-01199]] If pname:image was created with a sharing mode of
ename:VK_SHARING_MODE_CONCURRENT, pname:srcQueueFamilyIndex and
pname:dstQueueFamilyIndex must: both be ename:VK_QUEUE_FAMILY_IGNORED
endif::VK_KHX_external_memory[]
ifdef::VK_KHX_external_memory[]
unless one of them is ename:VK_QUEUE_FAMILY_EXTERNAL_KHX and the other
is ename:VK_QUEUE_FAMILY_IGNORED.
* [[VUID-VkImageMemoryBarrier-image-01381]] If pname:image was created with a sharing mode of
ename:VK_SHARING_MODE_CONCURRENT, at least one of
pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex must: be
ename:VK_QUEUE_FAMILY_IGNORED
* [[VUID-VkImageMemoryBarrier-image-01382]] If pname:image was created with a sharing mode of
ename:VK_SHARING_MODE_CONCURRENT, and one of pname:srcQueueFamilyIndex
and pname:dstQueueFamilyIndex is ename:VK_QUEUE_FAMILY_IGNORED, the
other must: be ename:VK_QUEUE_FAMILY_IGNORED or
ename:VK_QUEUE_FAMILY_EXTERNAL_KHX
endif::VK_KHX_external_memory[]
ifndef::VK_KHX_external_memory[]
* If pname:image was created with a sharing mode of
* [[VUID-VkImageMemoryBarrier-image-01200]] If pname:image was created with a sharing mode of
ename:VK_SHARING_MODE_EXCLUSIVE, pname:srcQueueFamilyIndex and
pname:dstQueueFamilyIndex must: either both be
ename:VK_QUEUE_FAMILY_IGNORED, or both be a valid queue family (see
<<devsandqueues-queueprops>>).
endif::VK_KHX_external_memory[]
ifdef::VK_KHX_external_memory[]
* If pname:image was created with a sharing mode of
* [[VUID-VkImageMemoryBarrier-image-01201]] If pname:image was created with a sharing mode of
ename:VK_SHARING_MODE_EXCLUSIVE and pname:srcQueueFamilyIndex is
ename:VK_QUEUE_FAMILY_IGNORED, pname:dstQueueFamilyIndex must: also be
ename:VK_QUEUE_FAMILY_IGNORED.
* If pname:image was created with a sharing mode of
* [[VUID-VkImageMemoryBarrier-image-01202]] If pname:image was created with a sharing mode of
ename:VK_SHARING_MODE_EXCLUSIVE and pname:srcQueueFamilyIndex is not
ename:VK_QUEUE_FAMILY_IGNORED, it must: be a valid queue family or
VK_QUEUE_FAMILY_EXTERNAL_KHX (see <<devsandqueues-queueprops>>).
* If pname:image was created with a sharing mode of
* [[VUID-VkImageMemoryBarrier-image-01203]] If pname:image was created with a sharing mode of
ename:VK_SHARING_MODE_EXCLUSIVE and pname:dstQueueFamilyIndex is not
ename:VK_QUEUE_FAMILY_IGNORED, it must: be a valid queue family or
VK_QUEUE_FAMILY_EXTERNAL_KHX (see <<devsandqueues-queueprops>>).
endif::VK_KHX_external_memory[]
* If pname:image was created with a sharing mode of
* [[VUID-VkImageMemoryBarrier-image-01204]] If pname:image was created with a sharing mode of
ename:VK_SHARING_MODE_EXCLUSIVE, pname:srcQueueFamilyIndex and
pname:dstQueueFamilyIndex must: either both be
ename:VK_QUEUE_FAMILY_IGNORED, or both be a valid queue family (see
<<devsandqueues-queueprops>>)
* If pname:image was created with a sharing mode of
* [[VUID-VkImageMemoryBarrier-image-01205]] If pname:image was created with a sharing mode of
ename:VK_SHARING_MODE_EXCLUSIVE, and pname:srcQueueFamilyIndex and
pname:dstQueueFamilyIndex are valid queue families, at least one of them
must: be the same as the family of the queue that will execute this
barrier
* pname:subresourceRange must: be a valid image subresource range for the
* [[VUID-VkImageMemoryBarrier-subresourceRange-01206]] pname:subresourceRange must: be a valid image subresource range for the
image (see <<resources-image-views>>)
* If pname:image has a depth/stencil format with both depth and stencil
* [[VUID-VkImageMemoryBarrier-image-01207]] If pname:image has a depth/stencil format with both depth and stencil
components, then pname:aspectMask member of pname:subresourceRange must:
include both ename:VK_IMAGE_ASPECT_DEPTH_BIT and
ename:VK_IMAGE_ASPECT_STENCIL_BIT
* If either pname:oldLayout or pname:newLayout is
* [[VUID-VkImageMemoryBarrier-oldLayout-01208]] If either pname:oldLayout or pname:newLayout is
ename:VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL then pname:image must:
have been created with ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT set
* If either pname:oldLayout or pname:newLayout is
* [[VUID-VkImageMemoryBarrier-oldLayout-01209]] If either pname:oldLayout or pname:newLayout is
ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL then pname:image
must: have been created with
ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT set
* If either pname:oldLayout or pname:newLayout is
* [[VUID-VkImageMemoryBarrier-oldLayout-01210]] If either pname:oldLayout or pname:newLayout is
ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL then pname:image
must: have been created with
ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT set
* If either pname:oldLayout or pname:newLayout is
* [[VUID-VkImageMemoryBarrier-oldLayout-01211]] If either pname:oldLayout or pname:newLayout is
ename:VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL then pname:image must:
have been created with ename:VK_IMAGE_USAGE_SAMPLED_BIT or
ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT set
* If either pname:oldLayout or pname:newLayout is
* [[VUID-VkImageMemoryBarrier-oldLayout-01212]] If either pname:oldLayout or pname:newLayout is
ename:VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL then pname:image must: have
been created with ename:VK_IMAGE_USAGE_TRANSFER_SRC_BIT set
* If either pname:oldLayout or pname:newLayout is
* [[VUID-VkImageMemoryBarrier-oldLayout-01213]] If either pname:oldLayout or pname:newLayout is
ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL then pname:image must: have
been created with ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT set
****

View File

@ -483,7 +483,7 @@ include::../api/structs/VkPipelineTessellationStateCreateInfo.txt[]
.Valid Usage
****
* pname:patchControlPoints must: be greater than zero and less than or
* [[VUID-VkPipelineTessellationStateCreateInfo-patchControlPoints-01214]] pname:patchControlPoints must: be greater than zero and less than or
equal to sname:VkPhysicalDeviceLimits::pname:maxTessellationPatchSize
****

View File

@ -1288,7 +1288,7 @@ feature <<features-limits-maxSamplerLodBias,pname:maxSamplerLodBias>>.
The image level(s) [eq]#d#, [eq]#d~hi~#, and [eq]#d~lo~# which texels are
read from are selected based on the level-of-detail parameter, as follows.
If the sampler's pname:mipmapMode is ename:VK_SAMPLER_MIPMAP_MODE_NEAREST,
then level d is used:
then level [eq]#d# is used:
// The [.5em] extra spacing works around KaTeX github issue #603
[latexmath]

View File

@ -59,7 +59,7 @@ include::../api/structs/VkPipelineViewportSwizzleStateCreateInfoNV.txt[]
.Valid Usage
****
* pname:viewportCount must: match the pname:viewportCount set in
* [[VUID-VkPipelineViewportSwizzleStateCreateInfoNV-viewportCount-01215]] pname:viewportCount must: match the pname:viewportCount set in
sname:VkPipelineViewportStateCreateInfo
****
@ -436,15 +436,15 @@ include::../api/structs/VkPipelineViewportStateCreateInfo.txt[]
.Valid Usage
****
* If the <<features-features-multiViewport,multiple viewports>> feature is
* [[VUID-VkPipelineViewportStateCreateInfo-viewportCount-01216]] If the <<features-features-multiViewport,multiple viewports>> feature is
not enabled, pname:viewportCount must: be `1`
* If the <<features-features-multiViewport,multiple viewports>> feature is
* [[VUID-VkPipelineViewportStateCreateInfo-scissorCount-01217]] If the <<features-features-multiViewport,multiple viewports>> feature is
not enabled, pname:scissorCount must: be `1`
* pname:viewportCount must: be between `1` and
* [[VUID-VkPipelineViewportStateCreateInfo-viewportCount-01218]] pname:viewportCount must: be between `1` and
sname:VkPhysicalDeviceLimits::pname:maxViewports, inclusive
* pname:scissorCount must: be between `1` and
* [[VUID-VkPipelineViewportStateCreateInfo-scissorCount-01219]] pname:scissorCount must: be between `1` and
sname:VkPhysicalDeviceLimits::pname:maxViewports, inclusive
* pname:scissorCount and pname:viewportCount must: be identical
* [[VUID-VkPipelineViewportStateCreateInfo-scissorCount-01220]] pname:scissorCount and pname:viewportCount must: be identical
****
include::../validity/structs/VkPipelineViewportStateCreateInfo.txt[]
@ -517,17 +517,17 @@ replace the current state for the viewport index [eq]#pname:firstViewport
.Valid Usage
****
* The currently bound graphics pipeline must: have been created with the
* [[VUID-vkCmdSetViewport-None-01221]] The currently bound graphics pipeline must: have been created with the
ename:VK_DYNAMIC_STATE_VIEWPORT dynamic state enabled
* pname:firstViewport must: be less than
* [[VUID-vkCmdSetViewport-firstViewport-01222]] pname:firstViewport must: be less than
sname:VkPhysicalDeviceLimits::pname:maxViewports
* The sum of pname:firstViewport and pname:viewportCount must: be between
* [[VUID-vkCmdSetViewport-firstViewport-01223]] The sum of pname:firstViewport and pname:viewportCount must: be between
`1` and sname:VkPhysicalDeviceLimits::pname:maxViewports, inclusive
* If the <<features-features-multiViewport,multiple viewports>> feature is
* [[VUID-vkCmdSetViewport-firstViewport-01224]] If the <<features-features-multiViewport,multiple viewports>> feature is
not enabled, pname:firstViewport must: be `0`
* If the <<features-features-multiViewport,multiple viewports>> feature is
* [[VUID-vkCmdSetViewport-viewportCount-01225]] If the <<features-features-multiViewport,multiple viewports>> feature is
not enabled, pname:viewportCount must: be `1`
* pname:pViewports must: be a pointer to an array of pname:viewportCount
* [[VUID-vkCmdSetViewport-pViewports-01226]] pname:pViewports must: be a pointer to an array of pname:viewportCount
valid sname:VkViewport structures
****
@ -590,30 +590,30 @@ The floating-point viewport bounds are represented with an
.Valid Usage
****
* pname:width must: be greater than `0.0` and less than or equal to
* [[VUID-VkViewport-width-01227]] pname:width must: be greater than `0.0` and less than or equal to
sname:VkPhysicalDeviceLimits::pname:maxViewportDimensions[0]
ifndef::VK_KHR_maintenance1[]
* pname:height must: be greater than `0.0` and less than or equal to
* [[VUID-VkViewport-height-01228]] pname:height must: be greater than `0.0` and less than or equal to
sname:VkPhysicalDeviceLimits::pname:maxViewportDimensions[1]
endif::VK_KHR_maintenance1[]
ifdef::VK_KHR_maintenance1[]
* pname:height must: be greater than or equal to
* [[VUID-VkViewport-height-01229]] pname:height must: be greater than or equal to
-sname:VkPhysicalDeviceLimits::pname:maxViewportDimensions[1] and less
than or equal to
sname:VkPhysicalDeviceLimits::pname:maxViewportDimensions[1]
endif::VK_KHR_maintenance1[]
ifdef::VK_AMD_negative_viewport_height[]
* If the VK_AMD_negative_viewport_height extension is enabled,
* [[VUID-VkViewport-height-01230]] If the VK_AMD_negative_viewport_height extension is enabled,
pname:height can: also be negative.
endif::VK_AMD_negative_viewport_height[]
* pname:x and pname:y must: each be between pname:viewportBoundsRange[0]
* [[VUID-VkViewport-x-01231]] pname:x and pname:y must: each be between pname:viewportBoundsRange[0]
and pname:viewportBoundsRange[1], inclusive
* pname:x + pname:width must: be less than or equal to
* [[VUID-VkViewport-x-01232]] pname:x + pname:width must: be less than or equal to
pname:viewportBoundsRange[1]
* pname:y + pname:height must: be less than or equal to
* [[VUID-VkViewport-y-01233]] pname:y + pname:height must: be less than or equal to
pname:viewportBoundsRange[1]
* pname:minDepth must: be between `0.0` and `1.0`, inclusive
* pname:maxDepth must: be between `0.0` and `1.0`, inclusive
* [[VUID-VkViewport-minDepth-01234]] pname:minDepth must: be between `0.0` and `1.0`, inclusive
* [[VUID-VkViewport-maxDepth-01235]] pname:maxDepth must: be between `0.0` and `1.0`, inclusive
****
include::../validity/structs/VkViewport.txt[]

View File

@ -14,9 +14,11 @@ extensions['VK_GOOGLE_display_timing'] = [ 'VK_KHR_surface', 'VK_KHR_swapchain'
extensions['VK_KHR_android_surface'] = [ 'VK_KHR_surface' ]
extensions['VK_KHR_display'] = [ 'VK_KHR_surface' ]
extensions['VK_KHR_display_swapchain'] = [ 'VK_KHR_display', 'VK_KHR_surface', 'VK_KHR_swapchain' ]
extensions['VK_KHR_get_surface_capabilities2'] = [ 'VK_KHR_surface' ]
extensions['VK_KHR_incremental_present'] = [ 'VK_KHR_surface', 'VK_KHR_swapchain' ]
extensions['VK_KHR_mir_surface'] = [ 'VK_KHR_surface' ]
extensions['VK_KHR_push_descriptor'] = [ 'VK_KHR_get_physical_device_properties2' ]
extensions['VK_KHR_shared_presentable_image'] = [ 'VK_KHR_get_physical_device_properties2', 'VK_KHR_get_surface_capabilities2', 'VK_KHR_surface', 'VK_KHR_swapchain' ]
extensions['VK_KHR_swapchain'] = [ 'VK_KHR_surface' ]
extensions['VK_KHR_wayland_surface'] = [ 'VK_KHR_surface' ]
extensions['VK_KHR_win32_surface'] = [ 'VK_KHR_surface' ]
@ -41,6 +43,6 @@ extensions['VK_NV_external_memory_win32'] = [ 'VK_NV_external_memory', 'VK_NV_ex
extensions['VK_NV_win32_keyed_mutex'] = [ 'VK_NV_external_memory', 'VK_NV_external_memory_capabilities', 'VK_NV_external_memory_win32' ]
# Define lists of all / KHR / KHX extensions
allExts = [ 'VK_AMD_draw_indirect_count', 'VK_AMD_gcn_shader', 'VK_AMD_gpu_shader_half_float', 'VK_AMD_negative_viewport_height', 'VK_AMD_rasterization_order', 'VK_AMD_shader_ballot', 'VK_AMD_shader_explicit_vertex_parameter', 'VK_AMD_shader_trinary_minmax', 'VK_EXT_acquire_xlib_display', 'VK_EXT_debug_marker', 'VK_EXT_debug_report', 'VK_EXT_direct_mode_display', 'VK_EXT_discard_rectangles', 'VK_EXT_display_control', 'VK_EXT_display_surface_counter', 'VK_EXT_hdr_metadata', 'VK_EXT_shader_subgroup_ballot', 'VK_EXT_shader_subgroup_vote', 'VK_EXT_swapchain_colorspace', 'VK_EXT_validation_flags', 'VK_GOOGLE_display_timing', 'VK_IMG_filter_cubic', 'VK_IMG_format_pvrtc', 'VK_KHR_android_surface', 'VK_KHR_descriptor_update_template', 'VK_KHR_display', 'VK_KHR_display_swapchain', 'VK_KHR_get_physical_device_properties2', 'VK_KHR_incremental_present', 'VK_KHR_maintenance1', 'VK_KHR_mir_surface', 'VK_KHR_push_descriptor', 'VK_KHR_sampler_mirror_clamp_to_edge', 'VK_KHR_shader_draw_parameters', 'VK_KHR_surface', 'VK_KHR_swapchain', 'VK_KHR_wayland_surface', 'VK_KHR_win32_surface', 'VK_KHR_xcb_surface', 'VK_KHR_xlib_surface', 'VK_KHX_device_group', 'VK_KHX_device_group_creation', 'VK_KHX_external_memory', 'VK_KHX_external_memory_capabilities', 'VK_KHX_external_memory_fd', 'VK_KHX_external_memory_win32', 'VK_KHX_external_semaphore', 'VK_KHX_external_semaphore_capabilities', 'VK_KHX_external_semaphore_fd', 'VK_KHX_external_semaphore_win32', 'VK_KHX_multiview', 'VK_KHX_win32_keyed_mutex', 'VK_MVK_ios_surface', 'VK_MVK_macos_surface', 'VK_NN_vi_surface', 'VK_NVX_device_generated_commands', 'VK_NVX_multiview_per_view_attributes', 'VK_NV_clip_space_w_scaling', 'VK_NV_dedicated_allocation', 'VK_NV_external_memory', 'VK_NV_external_memory_capabilities', 'VK_NV_external_memory_win32', 'VK_NV_geometry_shader_passthrough', 'VK_NV_glsl_shader', 'VK_NV_sample_mask_override_coverage', 'VK_NV_viewport_array2', 'VK_NV_viewport_swizzle', 'VK_NV_win32_keyed_mutex' ]
khrExts = [ 'VK_KHR_android_surface', 'VK_KHR_descriptor_update_template', 'VK_KHR_display', 'VK_KHR_display_swapchain', 'VK_KHR_get_physical_device_properties2', 'VK_KHR_incremental_present', 'VK_KHR_maintenance1', 'VK_KHR_mir_surface', 'VK_KHR_push_descriptor', 'VK_KHR_sampler_mirror_clamp_to_edge', 'VK_KHR_shader_draw_parameters', 'VK_KHR_surface', 'VK_KHR_swapchain', 'VK_KHR_wayland_surface', 'VK_KHR_win32_surface', 'VK_KHR_xcb_surface', 'VK_KHR_xlib_surface' ]
allExts = [ 'VK_AMD_draw_indirect_count', 'VK_AMD_gcn_shader', 'VK_AMD_gpu_shader_half_float', 'VK_AMD_negative_viewport_height', 'VK_AMD_rasterization_order', 'VK_AMD_shader_ballot', 'VK_AMD_shader_explicit_vertex_parameter', 'VK_AMD_shader_trinary_minmax', 'VK_EXT_acquire_xlib_display', 'VK_EXT_debug_marker', 'VK_EXT_debug_report', 'VK_EXT_direct_mode_display', 'VK_EXT_discard_rectangles', 'VK_EXT_display_control', 'VK_EXT_display_surface_counter', 'VK_EXT_hdr_metadata', 'VK_EXT_shader_subgroup_ballot', 'VK_EXT_shader_subgroup_vote', 'VK_EXT_swapchain_colorspace', 'VK_EXT_validation_flags', 'VK_GOOGLE_display_timing', 'VK_IMG_filter_cubic', 'VK_IMG_format_pvrtc', 'VK_KHR_android_surface', 'VK_KHR_descriptor_update_template', 'VK_KHR_display', 'VK_KHR_display_swapchain', 'VK_KHR_get_physical_device_properties2', 'VK_KHR_get_surface_capabilities2', 'VK_KHR_incremental_present', 'VK_KHR_maintenance1', 'VK_KHR_mir_surface', 'VK_KHR_push_descriptor', 'VK_KHR_sampler_mirror_clamp_to_edge', 'VK_KHR_shader_draw_parameters', 'VK_KHR_shared_presentable_image', 'VK_KHR_surface', 'VK_KHR_swapchain', 'VK_KHR_wayland_surface', 'VK_KHR_win32_surface', 'VK_KHR_xcb_surface', 'VK_KHR_xlib_surface', 'VK_KHX_device_group', 'VK_KHX_device_group_creation', 'VK_KHX_external_memory', 'VK_KHX_external_memory_capabilities', 'VK_KHX_external_memory_fd', 'VK_KHX_external_memory_win32', 'VK_KHX_external_semaphore', 'VK_KHX_external_semaphore_capabilities', 'VK_KHX_external_semaphore_fd', 'VK_KHX_external_semaphore_win32', 'VK_KHX_multiview', 'VK_KHX_win32_keyed_mutex', 'VK_MVK_ios_surface', 'VK_MVK_macos_surface', 'VK_NN_vi_surface', 'VK_NVX_device_generated_commands', 'VK_NVX_multiview_per_view_attributes', 'VK_NV_clip_space_w_scaling', 'VK_NV_dedicated_allocation', 'VK_NV_external_memory', 'VK_NV_external_memory_capabilities', 'VK_NV_external_memory_win32', 'VK_NV_geometry_shader_passthrough', 'VK_NV_glsl_shader', 'VK_NV_sample_mask_override_coverage', 'VK_NV_viewport_array2', 'VK_NV_viewport_swizzle', 'VK_NV_win32_keyed_mutex' ]
khrExts = [ 'VK_KHR_android_surface', 'VK_KHR_descriptor_update_template', 'VK_KHR_display', 'VK_KHR_display_swapchain', 'VK_KHR_get_physical_device_properties2', 'VK_KHR_get_surface_capabilities2', 'VK_KHR_incremental_present', 'VK_KHR_maintenance1', 'VK_KHR_mir_surface', 'VK_KHR_push_descriptor', 'VK_KHR_sampler_mirror_clamp_to_edge', 'VK_KHR_shader_draw_parameters', 'VK_KHR_shared_presentable_image', 'VK_KHR_surface', 'VK_KHR_swapchain', 'VK_KHR_wayland_surface', 'VK_KHR_win32_surface', 'VK_KHR_xcb_surface', 'VK_KHR_xlib_surface' ]
khxExts = [ 'VK_KHX_device_group', 'VK_KHX_device_group_creation', 'VK_KHX_external_memory', 'VK_KHX_external_memory_capabilities', 'VK_KHX_external_memory_fd', 'VK_KHX_external_memory_win32', 'VK_KHX_external_semaphore', 'VK_KHX_external_semaphore_capabilities', 'VK_KHX_external_semaphore_fd', 'VK_KHX_external_semaphore_win32', 'VK_KHX_multiview', 'VK_KHX_win32_keyed_mutex' ]

View File

@ -14,9 +14,11 @@ extensions[VK_GOOGLE_display_timing]="VK_KHR_surface VK_KHR_swapchain"
extensions[VK_KHR_android_surface]="VK_KHR_surface"
extensions[VK_KHR_display]="VK_KHR_surface"
extensions[VK_KHR_display_swapchain]="VK_KHR_display VK_KHR_surface VK_KHR_swapchain"
extensions[VK_KHR_get_surface_capabilities2]="VK_KHR_surface"
extensions[VK_KHR_incremental_present]="VK_KHR_surface VK_KHR_swapchain"
extensions[VK_KHR_mir_surface]="VK_KHR_surface"
extensions[VK_KHR_push_descriptor]="VK_KHR_get_physical_device_properties2"
extensions[VK_KHR_shared_presentable_image]="VK_KHR_get_physical_device_properties2 VK_KHR_get_surface_capabilities2 VK_KHR_surface VK_KHR_swapchain"
extensions[VK_KHR_swapchain]="VK_KHR_surface"
extensions[VK_KHR_wayland_surface]="VK_KHR_surface"
extensions[VK_KHR_win32_surface]="VK_KHR_surface"
@ -41,6 +43,6 @@ extensions[VK_NV_external_memory_win32]="VK_NV_external_memory VK_NV_external_me
extensions[VK_NV_win32_keyed_mutex]="VK_NV_external_memory VK_NV_external_memory_capabilities VK_NV_external_memory_win32"
# Define lists of all / KHR / KHX extensions
allExts="VK_AMD_draw_indirect_count VK_AMD_gcn_shader VK_AMD_gpu_shader_half_float VK_AMD_negative_viewport_height VK_AMD_rasterization_order VK_AMD_shader_ballot VK_AMD_shader_explicit_vertex_parameter VK_AMD_shader_trinary_minmax VK_EXT_acquire_xlib_display VK_EXT_debug_marker VK_EXT_debug_report VK_EXT_direct_mode_display VK_EXT_discard_rectangles VK_EXT_display_control VK_EXT_display_surface_counter VK_EXT_hdr_metadata VK_EXT_shader_subgroup_ballot VK_EXT_shader_subgroup_vote VK_EXT_swapchain_colorspace VK_EXT_validation_flags VK_GOOGLE_display_timing VK_IMG_filter_cubic VK_IMG_format_pvrtc VK_KHR_android_surface VK_KHR_descriptor_update_template VK_KHR_display VK_KHR_display_swapchain VK_KHR_get_physical_device_properties2 VK_KHR_incremental_present VK_KHR_maintenance1 VK_KHR_mir_surface VK_KHR_push_descriptor VK_KHR_sampler_mirror_clamp_to_edge VK_KHR_shader_draw_parameters VK_KHR_surface VK_KHR_swapchain VK_KHR_wayland_surface VK_KHR_win32_surface VK_KHR_xcb_surface VK_KHR_xlib_surface VK_KHX_device_group VK_KHX_device_group_creation VK_KHX_external_memory VK_KHX_external_memory_capabilities VK_KHX_external_memory_fd VK_KHX_external_memory_win32 VK_KHX_external_semaphore VK_KHX_external_semaphore_capabilities VK_KHX_external_semaphore_fd VK_KHX_external_semaphore_win32 VK_KHX_multiview VK_KHX_win32_keyed_mutex VK_MVK_ios_surface VK_MVK_macos_surface VK_NN_vi_surface VK_NVX_device_generated_commands VK_NVX_multiview_per_view_attributes VK_NV_clip_space_w_scaling VK_NV_dedicated_allocation VK_NV_external_memory VK_NV_external_memory_capabilities VK_NV_external_memory_win32 VK_NV_geometry_shader_passthrough VK_NV_glsl_shader VK_NV_sample_mask_override_coverage VK_NV_viewport_array2 VK_NV_viewport_swizzle VK_NV_win32_keyed_mutex"
khrExts="VK_KHR_android_surface VK_KHR_descriptor_update_template VK_KHR_display VK_KHR_display_swapchain VK_KHR_get_physical_device_properties2 VK_KHR_incremental_present VK_KHR_maintenance1 VK_KHR_mir_surface VK_KHR_push_descriptor VK_KHR_sampler_mirror_clamp_to_edge VK_KHR_shader_draw_parameters VK_KHR_surface VK_KHR_swapchain VK_KHR_wayland_surface VK_KHR_win32_surface VK_KHR_xcb_surface VK_KHR_xlib_surface"
allExts="VK_AMD_draw_indirect_count VK_AMD_gcn_shader VK_AMD_gpu_shader_half_float VK_AMD_negative_viewport_height VK_AMD_rasterization_order VK_AMD_shader_ballot VK_AMD_shader_explicit_vertex_parameter VK_AMD_shader_trinary_minmax VK_EXT_acquire_xlib_display VK_EXT_debug_marker VK_EXT_debug_report VK_EXT_direct_mode_display VK_EXT_discard_rectangles VK_EXT_display_control VK_EXT_display_surface_counter VK_EXT_hdr_metadata VK_EXT_shader_subgroup_ballot VK_EXT_shader_subgroup_vote VK_EXT_swapchain_colorspace VK_EXT_validation_flags VK_GOOGLE_display_timing VK_IMG_filter_cubic VK_IMG_format_pvrtc VK_KHR_android_surface VK_KHR_descriptor_update_template VK_KHR_display VK_KHR_display_swapchain VK_KHR_get_physical_device_properties2 VK_KHR_get_surface_capabilities2 VK_KHR_incremental_present VK_KHR_maintenance1 VK_KHR_mir_surface VK_KHR_push_descriptor VK_KHR_sampler_mirror_clamp_to_edge VK_KHR_shader_draw_parameters VK_KHR_shared_presentable_image VK_KHR_surface VK_KHR_swapchain VK_KHR_wayland_surface VK_KHR_win32_surface VK_KHR_xcb_surface VK_KHR_xlib_surface VK_KHX_device_group VK_KHX_device_group_creation VK_KHX_external_memory VK_KHX_external_memory_capabilities VK_KHX_external_memory_fd VK_KHX_external_memory_win32 VK_KHX_external_semaphore VK_KHX_external_semaphore_capabilities VK_KHX_external_semaphore_fd VK_KHX_external_semaphore_win32 VK_KHX_multiview VK_KHX_win32_keyed_mutex VK_MVK_ios_surface VK_MVK_macos_surface VK_NN_vi_surface VK_NVX_device_generated_commands VK_NVX_multiview_per_view_attributes VK_NV_clip_space_w_scaling VK_NV_dedicated_allocation VK_NV_external_memory VK_NV_external_memory_capabilities VK_NV_external_memory_win32 VK_NV_geometry_shader_passthrough VK_NV_glsl_shader VK_NV_sample_mask_override_coverage VK_NV_viewport_array2 VK_NV_viewport_swizzle VK_NV_win32_keyed_mutex"
khrExts="VK_KHR_android_surface VK_KHR_descriptor_update_template VK_KHR_display VK_KHR_display_swapchain VK_KHR_get_physical_device_properties2 VK_KHR_get_surface_capabilities2 VK_KHR_incremental_present VK_KHR_maintenance1 VK_KHR_mir_surface VK_KHR_push_descriptor VK_KHR_sampler_mirror_clamp_to_edge VK_KHR_shader_draw_parameters VK_KHR_shared_presentable_image VK_KHR_surface VK_KHR_swapchain VK_KHR_wayland_surface VK_KHR_win32_surface VK_KHR_xcb_surface VK_KHR_xlib_surface"
khxExts="VK_KHX_device_group VK_KHX_device_group_creation VK_KHX_external_memory VK_KHX_external_memory_capabilities VK_KHX_external_memory_fd VK_KHX_external_memory_win32 VK_KHX_external_semaphore VK_KHX_external_semaphore_capabilities VK_KHX_external_semaphore_fd VK_KHX_external_semaphore_win32 VK_KHX_multiview VK_KHX_win32_keyed_mutex"

View File

@ -0,0 +1,20 @@
# Copyright (c) 2016-2017 The Khronos Group Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
RUBY_ENGINE == 'opal' ? (require 'vu-to-json/extension') : (require_relative 'vu-to-json/extension')
Extensions.register do
preprocessor ValidUsageToJsonPreprocessor
treeprocessor ValidUsageToJsonTreeprocessor
end

View File

@ -0,0 +1,159 @@
# Copyright (c) 2016-2017 The Khronos Group Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
require 'asciidoctor/extensions' unless RUBY_ENGINE == 'opal'
include ::Asciidoctor
module Asciidoctor
# Preprocessor hook to iterate over ifdefs to prevent them from affecting asciidoctor's processing.
class ValidUsageToJsonPreprocessor < Extensions::Preprocessor
# For any given line, turn an ifdef/ifndef/endif statements for extensions into bullet items, and expand includes to do the same to included files.
def process_line line, current_dir
new_lines = []
# Turn extension ifdefs into list items for when we're processing VU later.
if line.start_with?( 'ifdef::VK_', 'ifndef::VK_', 'endif::VK_')
new_lines << '* ' + line
end
# Check for include lines, using a copy of the built-in Asciidoctor regex "IncludeDirectiveRx"
# Once found, expand the include so we can continue processing it for ifdef lines
match = /^\\?include::([^\[]+)\[(.*?)\]$/.match(line)
if (match)
target = match[1]
target_path = Pathname.new(target)
if target_path.relative?
target_path = Pathname.new(File.expand_path(target, current_dir))
end
target_dir = File.dirname(target_path.to_s)
# sub the original line for the included file by recursion, if it exists. Else print a warning
if File.exists?(target_path)
IO.readlines(target_path).map do | include_line |
new_lines += process_line(include_line.strip, target_dir)
end
else
puts 'VU Extraction Preprocessor: WARNING - Include file "' + target_path.to_s + '" not found - skipping. Have you built with all extensions?'
end
end
# If it wasn't an include or ifdef line, pass it through unchanged.
if new_lines == []
new_lines << line
end
# Return the new lines
new_lines
end
def process document, reader
# Iterate through the current lines, and create new ones.
new_lines = []
reader.lines.map do | line |
new_lines += process_line(line.strip, document.base_dir)
end
# Create a new reader to return, with preprocessing already done.
Reader.new(new_lines)
end
end
require 'json'
class ValidUsageToJsonTreeprocessor < Extensions::Treeprocessor
def process document
map = {}
# Find all the sidebars
(document.find_by context: :sidebar).each do |sidebar|
# Filter only the valid usage sidebars
if sidebar.title == "Valid Usage" || sidebar.title == "Valid Usage (Implicit)"
# There should be only one block - but just in case...
sidebar.blocks.each do |list|
extensions = []
# Iterate through all the items in the block, tracking which extensions are enabled/disabled.
list.blocks.each do |item|
if item.text.start_with?('ifdef::VK_')
extensions << '(' + item.text[('ifdef::'.length)..-3] + ')' # Look for "ifdef" directives and add them to the list of extensions
elsif item.text.start_with?('ifndef::VK_')
extensions << '!(' + item.text[('ifndef::'.length)..-3] + ')' # Ditto for "ifndef" directives
elsif item.text.start_with?('endif::VK_')
extensions.slice!(-1) # Remove the last element when encountering an endif
else
match = /<a id=\"(VUID-([^-]+)-[^"]+)\"[^>]*><\/a> (.*)/m.match(item.text) # Otherwise, look for the VUID.
if (match != nil)
vuid = match[1]
parent = match[2]
text = match[3].gsub("\n", ' ') # Have to forcibly remove newline characters, as for some reason they're translated to the literal string '\n' when converting to json. No idea why.
# Generate the table entry
entry = {'vuid' => vuid, 'text' => text}
# Initialize the database if needs be
if map[parent] == nil
map[parent] = {'core' => []}
end
# Add the entry to the table
if extensions == []
map[parent]['core'] << entry
else
if map[parent][extensions.join('+')] == nil
map[parent][extensions.join('+')] = []
end
map[parent][extensions.join('+')] << entry
end
else
puts "VU Extraction Treeprocessor: WARNING - Valid Usage statement without a VUID found: "
puts item.text
end
end
end
end
end
end
# Generate the json
json = JSON.pretty_generate(map)
outfile = document.attr('json_output')
# Verify the json against the schema, if the required gem is installed
begin
require 'json-schema'
# Read the schema in and validate against it
schema = IO.read(File.join(File.dirname(__FILE__), 'vu_schema.json'))
errors = JSON::Validator.fully_validate(schema, json)
# Output errors if there were any
if errors != []
puts 'VU Extraction JSON Validator: WARNING - Validation of the json schema failed'
puts 'It is likely that there is an invalid or malformed entry in the specification text,'
puts 'see below error messages for details, and use their VUIDs and text to correlate them to their location in the specification.'
puts errors
end
rescue LoadError
puts 'VU Extraction JSON Validator: WARNING - "json-schema" gem missing - skipping verification of json output'
# error handling code here
end
# Write the file and exit - no further processing required.
IO.write(outfile, json)
exit! 0
end
end
end

View File

@ -0,0 +1,42 @@
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "Command and Structure Validation in Vulkan",
"description": "A database of validatable commands and structures in the Vulkan API",
"type": "object",
"additionalProperties": false,
"patternProperties": {
"^[vV]k[A-Z][A-Za-z0-9]+$": {
"title": "Vulkan Command or Structure",
"description": "Validation information for a structure or command in the Vulkan API",
"patternProperties": {
"^[\\w+!|]+$": {
"type": "array",
"items":
{
"title": "Valid Usage Statement",
"description": "A valid usage statement",
"type": "object",
"additionalProperties": false,
"properties": {
"vuid": {
"title": "Valid Usage ID",
"description": "String identifier for a valid usage statement, corresponding to an anchor in the spec for that statement",
"type": "string",
"pattern": "VUID-[vV]k[A-Z][A-Za-z0-9]+-[A-Za-z0-9-]*[A-Za-z0-9]"
},
"text": {
"title": "Valid Usage Text",
"description": "HTML formatted string of the valid usage statement text",
"type": "string"
}
},
"required": [
"vuid",
"text"
]
}
}
}
}
}
}

View File

@ -234,7 +234,7 @@ def emitPage(baseDir, specDir, pi, file):
# Specification text
lines = remapIncludes(file[pi.begin:pi.include+1], baseDir, specDir)
specText = ''.join(lines)
# Member/parameter list, if there is one
field = None
fieldText = None
@ -253,6 +253,14 @@ def emitPage(baseDir, specDir, pi, file):
lines = remapIncludes(file[pi.body:pi.end+1], baseDir, specDir)
descText = ''.join(lines)
# Substitute xrefs to point at the main spec
specLinksPattern = re.compile(r'<<([^>,]+)[,]?[ \t\n]*([^>,]*)>>')
specLinksSubstitute = r"link:{html_spec_relative}#\1[\2]"
specText, n = specLinksPattern.subn(specLinksSubstitute, specText)
if fieldText != None:
fieldText, n = specLinksPattern.subn(specLinksSubstitute, fieldText)
descText, n = specLinksPattern.subn(specLinksSubstitute, descText)
refPageHead(pi.name,
pi.desc,
specText,

View File

@ -20,9 +20,17 @@
# ignoring them. It's very likely there are many asciidoc constructs not yet
# accounted for in the script, our usage of asciidoc markup is intentionally
# somewhat limited.
#
# Also used to insert identifying tags on explicit Valid Usage statements.
# Usage: reflow.py [-overwrite] [-out dir] [-suffix str] files
# -overwrite updates in place (usually not desired, and risky)
# Usage: reflow.py [-noflow] [-tagvu] [-nextvu #] [-overwrite] [-out dir] [-suffix str] files
# -noflow acts as a passthrough, instead of reflowing text. Other
# processing may occur.
# -tagvu generates explicit VUID tag for Valid Usage statements which
# don't already have them.
# -nextvu # starts VUID tag generation at the specified # instead of
# the value wired into the reflow.py script.
# -overwrite updates in place (can be risky, make sure there are backups)
# -out specifies directory to create output file in, default 'out'
# -suffix specifies suffix to add to output files, default ''
# files are asciidoc source files from the Vulkan spec to reflow.
@ -44,6 +52,12 @@ import argparse, copy, os, pdb, re, string, sys
# label:: labelled list - label must be standalone
endPara = re.compile('^( *|\[.*\]|//.*|<<<<|:.*|[a-z]+::.*|\+|.*::)$')
# Special case of markup ending a paragraph, used to track the current command/structure
includePat = re.compile('^include::(\.\./)+api/+(?P<type>\w+)/(?P<name>\w+).txt\[\]')
# Find the first pname: pattern in a Valid Usage statement
pnamePat = re.compile('pname:(?P<param>\w+)')
# Markup that's OK in a contiguous paragraph but otherwise passed through
# .anything
# === Section Titles
@ -87,23 +101,42 @@ endAbbrev = re.compile('(e\.g|i\.e|c\.f)\.$', re.IGNORECASE)
# '--', '----', '****', '======', or '+++++++++'.
# This affects whether or not the block contents should be formatted.
# reflowStack - The last element is True or False if the current blockStack
# contents should be reflowed
# margin - margin to reflow text to
# contents should be reflowed.
# vuStack - the last element is True or False if the current blockStack
# contents are an explicit Valid Usage block.
# margin - margin to reflow text to.
# para - list of lines in the paragraph being accumulated. When this is
# non-empty, there is a current paragraph.
# leadIndent - indent level (in spaces) of the first line of a paragraph.
# hangIndent - indent level of the remaining lines of a paragraph.
# file - file pointer to write to
# filename - base name of file being read from
# lineNumber - line number being read from the input file
# file - file pointer to write to.
# filename - base name of file being read from.
# lineNumber - line number being read from the input file.
# breakPeriod - True if justification should break to a new line after
# the end of a sentence
# breakInitial - True if justification should break to a new
# the end of a sentence.
# breakInitial - True if justification should break to a new line after
# something that appears to be an initial in someone's name. **TBD**
# reflow - True if text should be reflowed, False to pass through unchanged.
# vuPrefix - Prefix of generated Valid Usage tags
# vuFormat - Format string for generating Valid Usage tags. First argument
# is vuPrefix, second is command/struct name, third is parameter name,
# fourth is the tag number.
# nextvu - Integer to start tagging un-numbered Valid Usage statements with,
# or None if no tagging should be done.
# apiName - String name of a Vulkan structure or command for VUID tag
# generation, or None if one hasn't been included in this file yet.
class ReflowState:
"""Represents the state of the reflow operation"""
def __init__(self, filename, margin = 76, file = sys.stdout, breakPeriod = True):
def __init__(self,
filename,
margin = 76,
file = sys.stdout,
breakPeriod = True,
reflow = True,
nextvu = None):
self.blockStack = [ None ]
self.reflowStack = [ True ]
self.vuStack = [ False ]
self.margin = margin
self.para = []
self.leadIndent = 0
@ -113,6 +146,11 @@ class ReflowState:
self.lineNumber = 0
self.breakPeriod = breakPeriod
self.breakInitial = True
self.reflow = reflow
self.vuPrefix = 'VUID'
self.vuFormat = '{0}-{1}-{2}-{3:0>5d}'
self.nextvu = nextvu
self.apiName = ''
def incrLineNumber(self):
self.lineNumber = self.lineNumber + 1
@ -139,7 +177,12 @@ class ReflowState:
# hanging indentation levels. The algorithm also respects trailing '+'
# signs that indicate imbedded newlines, and will not reflow a very long
# word immediately after a bullet point.
# Just return the paragraph unchanged if the -noflow argument was
# given.
def reflowPara(self):
if not self.reflow:
return self.para
logDiag('reflowPara lead indent = ', self.leadIndent,
'hangIndent =', self.hangIndent,
'para:', self.para[0], end='')
@ -278,7 +321,60 @@ class ReflowState:
# Emit a paragraph, possibly reflowing it depending on the block
# context. Reset the paragraph accumulator.
def emitPara(self):
global vuPat
if self.para != []:
if (self.vuStack[-1] and
self.nextvu != None and
self.vuPrefix not in self.para[0]):
# 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.
# 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 matches != None:
paramName = matches.group('param')
else:
paramName = 'None'
logWarn(self.filename,
'No param name found for VUID tag on line:',
self.para[0])
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
# or hand inspection.
# logWarn(self.filename + ': Unexpected non-bullet item in VU block (harmless if following an ifdef):',
# self.para[0])
if self.reflowStack[-1]:
self.printLines(self.reflowPara())
else:
@ -307,7 +403,9 @@ class ReflowState:
# 'line' begins or ends a block. If beginning a block, tag whether or
# not to reflow the contents.
def endBlock(self, line, reflow = False):
# vuBlock is True if the previous line indicates this is a Valid Usage
# block.
def endBlock(self, line, reflow = False, vuBlock = False):
self.endPara(line)
if self.blockStack[-1] == line:
@ -316,10 +414,12 @@ class ReflowState:
':', line, end='')
self.blockStack.pop()
self.reflowStack.pop()
self.vuStack.pop()
else:
# Start a block
self.blockStack.append(line)
self.reflowStack.append(reflow)
self.vuStack.append(vuBlock)
logDiag('endBlock reflow =', reflow, ' line', self.lineNumber,
': pushing block start depth', len(self.blockStack),
@ -327,8 +427,8 @@ class ReflowState:
# 'line' begins or ends a block. The paragraphs in the block *should* be
# reformatted (e.g. a NOTE).
def endParaBlockReflow(self, line):
self.endBlock(line, reflow = True)
def endParaBlockReflow(self, line, vuBlock):
self.endBlock(line, reflow = True, vuBlock = vuBlock)
# 'line' begins or ends a block. The paragraphs in the block should
# *not* be reformatted (e.g. a NOTE).
@ -370,7 +470,7 @@ class ReflowState:
self.hangIndent = indent
self.para.append(line)
def reflowFile(filename, overwrite, outDir, suffix):
def reflowFile(filename, args):
logDiag('reflow: filename', filename)
lines = loadFile(filename)
@ -381,10 +481,10 @@ def reflowFile(filename, overwrite, outDir, suffix):
# conditions on overwriting the input, but it's not recommended unless
# you have backing store such as git.
if overwrite:
if args.overwrite:
outFilename = filename
else:
outFilename = outDir + '/' + os.path.basename(filename) + suffix
outFilename = args.outDir + '/' + os.path.basename(filename) + args.suffix
try:
fp = open(outFilename, 'w', encoding='utf8')
@ -392,7 +492,10 @@ def reflowFile(filename, overwrite, outDir, suffix):
logWarn('Cannot open output file', filename, ':', sys.exc_info()[0])
return None
state = ReflowState(filename, file = fp)
state = ReflowState(filename,
file = fp,
reflow = not args.noflow,
nextvu = args.nextvu)
for line in lines:
state.incrLineNumber()
@ -406,6 +509,16 @@ def reflowFile(filename, overwrite, outDir, suffix):
# prepare to begin a new paragraph.
state.endPara(line)
# If this is an include:: line starting the definition of a
# structure or command, track that for use in VUID generation.
matches = includePat.search(line)
if matches != None:
type = matches.group('type')
if (type == 'protos' or type == 'structs'):
state.apiName = matches.group('name')
elif endParaContinue.match(line):
# For now, always just end the paragraph.
# Could check see if len(para) > 0 to accumulate.
@ -415,7 +528,11 @@ def reflowFile(filename, overwrite, outDir, suffix):
# Starting or ending a block whose contents may be reflowed.
# Blocks cannot be nested.
state.endParaBlockReflow(line)
# First see if this is an explicit Valid Usage block
vuBlock = (state.lineNumber > 1 and
lines[state.lineNumber-2] == '.Valid Usage\n')
state.endParaBlockReflow(line, vuBlock)
elif blockPassthrough.match(line):
# Starting or ending a block whose contents must not be reflowed.
# These are tables, etc. Blocks cannot be nested.
@ -438,9 +555,23 @@ def reflowFile(filename, overwrite, outDir, suffix):
fp.close()
# Update the 'nextvu' value
if (args.nextvu != state.nextvu):
logWarn('Updated nextvu to', state.nextvu, 'after file', filename)
args.nextvu = state.nextvu
# Patterns used to recognize interesting lines in an asciidoc source file.
# These patterns are only compiled once.
# Explicit Valid Usage list item with one or more leading asterisks
# The re.DOTALL is needed to prevent vuPat.search() from stripping
# the trailing newline.
global vuPat
vuPat = re.compile('^(?P<head> [*]+)( *)(?P<tail>.*)', re.DOTALL)
# The value to start tagging VU statements at, unless overridden by -nextvu
startVUID = 1385
if __name__ == '__main__':
parser = argparse.ArgumentParser()
@ -455,6 +586,13 @@ if __name__ == '__main__':
parser.add_argument('-out', action='store', dest='outDir',
default='out',
help='Set the output directory in which updated files are generated (default: out)')
parser.add_argument('-tagvu', action='store_true',
help='Tag un-tagged Valid Usage statements starting at the value wired into reflow.py')
parser.add_argument('-nextvu', action='store', dest='nextvu', type=int,
default=None,
help='Tag un-tagged Valid Usage statements starting at the specified base VUID instead of the value wired into reflow.py')
parser.add_argument('-noflow', action='store_true', dest='noflow',
help='Do not reflow text. Other actions may apply.')
parser.add_argument('-suffix', action='store', dest='suffix',
default='',
help='Set the suffix added to updated file names (default: none)')
@ -462,14 +600,25 @@ if __name__ == '__main__':
help='a filename to reflow text in')
parser.add_argument('--version', action='version', version='%(prog)s 1.0')
results = parser.parse_args()
args = parser.parse_args()
setLogFile(True, True, results.logFile)
setLogFile(True, False, results.diagFile)
setLogFile(False, True, results.warnFile)
setLogFile(True, True, args.logFile)
setLogFile(True, False, args.diagFile)
setLogFile(False, True, args.warnFile)
if (results.overwrite):
if args.overwrite:
logWarn('reflow.py: will overwrite all input files')
for file in results.files:
reflowFile(file, results.overwrite, results.outDir, results.suffix)
if args.tagvu and args.nextvu == None:
args.nextvu = startVUID
if args.nextvu != None:
logWarn('Tagging untagged Valid Usage statements starting at', args.nextvu)
for file in args.files:
reflowFile(file, args)
if args.nextvu != None and args.nextvu != startVUID:
logWarn('You must now edit the value of reflow.py:startVUID to',
args.nextvu,
'so that future runs will not overwrite existing VUID tags')

View File

@ -529,7 +529,57 @@ for extensions, which include (but may not be limited to) the following:
`chapters/VK_KHR_android_surface/platformQuerySupport_android.txt`, both
of which are conditionally included elsewhere in the core specification
files.
* Valid Usage statements must: be kept atomic with regards to extension
conditionals - do not surround part of a single statement with
conditionals.
Valid usage statements are automatically extracted from the
specification for use by ecosystem components like the validation
layers, and the extraction scripts need to know which valid usage
statements apply to which extensions.
The loops required to deal with partial statements are simply not worth
the trouble.
For example, instead of
+
--
[source,asciidoc]
.Example Markup
----
* If pname:buffer was created with a sharing mode of
ename:VK_SHARING_MODE_EXCLUSIVE, pname:srcQueueFamilyIndex and
pname:dstQueueFamilyIndex must: either both be
ename:VK_QUEUE_FAMILY_IGNORED, or both be a valid queue family (see
<<devsandqueues-queueprops>>)
\ifdef::VK_KHX_external_memory[]
unless one of them is ename:VK_QUEUE_FAMILY_EXTERNAL_KHX and the other
is ename:VK_QUEUE_FAMILY_IGNORED.
\endif::VK_KHX_external_memory[]
----
--
+
Use
+
--
[source,asciidoc]
.Example Markup
----
ifndef::VK_KHX_external_memory[]
* If pname:buffer was created with a sharing mode of
ename:VK_SHARING_MODE_EXCLUSIVE, pname:srcQueueFamilyIndex and
pname:dstQueueFamilyIndex must: either both be
ename:VK_QUEUE_FAMILY_IGNORED, or both be a valid queue family (see
<<devsandqueues-queueprops>>)
endif::VK_KHX_external_memory[]
ifdef::VK_KHX_external_memory[]
* If pname:buffer was created with a sharing mode of
ename:VK_SHARING_MODE_EXCLUSIVE, pname:srcQueueFamilyIndex and
pname:dstQueueFamilyIndex must: either both be
ename:VK_QUEUE_FAMILY_IGNORED, both be a valid queue family (see
<<devsandqueues-queueprops>>), or be
ename:VK_QUEUE_FAMILY_EXTERNAL_KHX and ename:VK_QUEUE_FAMILY_IGNORED in
either order
endif::VK_KHX_external_memory[]
----
--
== Assigning Extension Token Values

View File

@ -0,0 +1,103 @@
// Copyright (c) 2015-2017 Khronos Group. This work is licensed under a
// Creative Commons Attribution 4.0 International License; see
// http://creativecommons.org/licenses/by/4.0/
[appendix]
[[appendix-vuid]]
= Valid Usage ID Tags
Valid usage statements in the published Vulkan Specification must all be
given _Valid Usage ID_ or _VUID_ tags.
These tags are asciidoc anchors, intended for use by the validation layer to
provide unique names for each validation condition, and a way to link from
validation layer reports into the corresponding parts of the Specification.
== Format of VUID Tags
For implicit valid usage statements, the tags are formatted like this:
[source,asciidoc]
----
[[VUID-blockname-paramname-category]]
----
_blockname_ is the name of the function or structure for which a valid usage
statement is being generated.
_paramname_ is the name of the parameter being validated.
In some cases, the statement does not validate a single parameter and this
portion of the tag is absent.
_category_ is the type of statement being generated.
There are over one dozen types referring to distinct conditions such as
valid objects, required bitmasks, required array lengths, constraints on
parent objects, and so on.
For explicit valid usage statements, the tags are formatted like this:
[source,asciidoc]
----
[[VUID-blockname-paramname-number]]
----
_blockname_ is the name of the function or structure for which a valid usage
statement is being generated.
_paramname_ is the name of the parameter being validated.
In some cases, the statement does not validate a single parameter and this
portion of the tag is replaced by `-None-`
_number_ is a unique five digit, zero-filled number used to disambiguate
similar tag names.
== Creating VUID Tags
For implicit valid usage statements generated automatically from `vk.xml`,
VUID tags are created automatically by the generator scripts.
For explicit valid usage statements, VUID tags are generated by passing
appropriate options to the script `doc/specs/vulkan/reflow.py`.
Since these tags are of use only to the published validation layer, they are
needed only in the published Specification sources and outputs.
Therefore, authors of extensions, or other branches adding valid usage
statements, are not themselves responsible for adding tags in their
branches.
The specification editors will take care of this as part of the process of
publishing updates.
For reference purposes, this process is described below:
First, after integrating all new specification language into the internal
gitlab branch which contains the canonical Specification source, invoke the
following command in `doc/specs/vulkan`:
[source,sh]
----
python3 reflow.py -overwrite -noflow -tagvu chapters/*.txt chapters/*/*.txt
----
This will add VUID tags to all statements in valid usage blocks which don't
already have them.
Some diagnostics will be reported, but these are do not in general require
any action.
After updating all files, the script will print out a final line like:
[source,sh]
----
WARN: You must now edit the value of reflow.py:startVUID to 1376 so that future runs will not overwrite existing VUID tags
----
Second, after verifying the updates are correct using e.g. `git diff`, edit
`reflow.py` and edit the definition of the variable startVUID as directed:
[source,python]
----
# The value to start tagging VU statements at, unless overridden by -nextvu
startVUID = 1376
----
Commit the updated source files and `reflow.py` together.
The next time the script is run, VUID tags will be assigned numbers starting
from the current startVUID value.

View File

@ -662,6 +662,20 @@ For example, instead of writing "`width, height, and depth must: all be
greater than zero`", write each condition as a separate statement.
In contrast, "`width {times} height must: be less than 1024`" is a single
assertion involving multiple parameters.
Do not use "unless" to call out exceptions - always write valid usage
statements of the form "if _A_ then _B_".
This may result in harder to read statements in a few cases, but keeps
things consistent.
In many cases, it may lead to a simpler VU statement, or splitting one large
VU into multiple.
Explicit Valid Usage statements must be assigned Valid Usage ID tags before
publication. This process is described in the <<appendix-vuid, Valid Usage
ID Tags>> appendix, but is normally performed only when preparing to
integrate functionality into the Vulkan Specification prior to publication.
It is something authors of new functionality should be aware of, but are not
themselves responsible for.
====

View File

@ -151,8 +151,14 @@ include::style/writing.txt[]
* Glossary lists
* New param/enum macros
// Appendices are included below
include::style/vuid.txt[]
= Revision History
* 2017-05-08 - Add appendix describing <<appendix-vuid, Valid Usage ID
Tags>> and how they're generated.
* 2017-03-19 - Add naming rule for <<naming-extension-structures, Extension
Structure Names>>.
* 2017-02-11 - Finish transitioning to asciidoctor markup.

View File

@ -661,6 +661,49 @@ void vkCmdPushDescriptorSetWithTemplateKHR(
}
#endif /* VK_KHR_descriptor_update_template */
#ifdef VK_KHR_shared_presentable_image
static PFN_vkGetSwapchainStatusKHR pfn_vkGetSwapchainStatusKHR;
VkResult vkGetSwapchainStatusKHR(
VkDevice device,
VkSwapchainKHR swapchain)
{
return pfn_vkGetSwapchainStatusKHR(
device,
swapchain
);
}
#endif /* VK_KHR_shared_presentable_image */
#ifdef VK_KHR_get_surface_capabilities2
static PFN_vkGetPhysicalDeviceSurfaceCapabilities2KHR pfn_vkGetPhysicalDeviceSurfaceCapabilities2KHR;
VkResult vkGetPhysicalDeviceSurfaceCapabilities2KHR(
VkPhysicalDevice physicalDevice,
const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo,
VkSurfaceCapabilities2KHR* pSurfaceCapabilities)
{
return pfn_vkGetPhysicalDeviceSurfaceCapabilities2KHR(
physicalDevice,
pSurfaceInfo,
pSurfaceCapabilities
);
}
static PFN_vkGetPhysicalDeviceSurfaceFormats2KHR pfn_vkGetPhysicalDeviceSurfaceFormats2KHR;
VkResult vkGetPhysicalDeviceSurfaceFormats2KHR(
VkPhysicalDevice physicalDevice,
const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo,
uint32_t* pSurfaceFormatCount,
VkSurfaceFormat2KHR* pSurfaceFormats)
{
return pfn_vkGetPhysicalDeviceSurfaceFormats2KHR(
physicalDevice,
pSurfaceInfo,
pSurfaceFormatCount,
pSurfaceFormats
);
}
#endif /* VK_KHR_get_surface_capabilities2 */
#ifdef VK_EXT_debug_report
static PFN_vkCreateDebugReportCallbackEXT pfn_vkCreateDebugReportCallbackEXT;
VkResult vkCreateDebugReportCallbackEXT(
@ -1627,6 +1670,13 @@ void vkExtInitInstance(VkInstance instance)
pfn_vkUpdateDescriptorSetWithTemplateKHR = (PFN_vkUpdateDescriptorSetWithTemplateKHR)vkGetInstanceProcAddr(instance, "vkUpdateDescriptorSetWithTemplateKHR");
pfn_vkCmdPushDescriptorSetWithTemplateKHR = (PFN_vkCmdPushDescriptorSetWithTemplateKHR)vkGetInstanceProcAddr(instance, "vkCmdPushDescriptorSetWithTemplateKHR");
#endif /* VK_KHR_descriptor_update_template */
#ifdef VK_KHR_shared_presentable_image
pfn_vkGetSwapchainStatusKHR = (PFN_vkGetSwapchainStatusKHR)vkGetInstanceProcAddr(instance, "vkGetSwapchainStatusKHR");
#endif /* VK_KHR_shared_presentable_image */
#ifdef VK_KHR_get_surface_capabilities2
pfn_vkGetPhysicalDeviceSurfaceCapabilities2KHR = (PFN_vkGetPhysicalDeviceSurfaceCapabilities2KHR)vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceSurfaceCapabilities2KHR");
pfn_vkGetPhysicalDeviceSurfaceFormats2KHR = (PFN_vkGetPhysicalDeviceSurfaceFormats2KHR)vkGetInstanceProcAddr(instance, "vkGetPhysicalDeviceSurfaceFormats2KHR");
#endif /* VK_KHR_get_surface_capabilities2 */
#ifdef VK_EXT_debug_report
pfn_vkCreateDebugReportCallbackEXT = (PFN_vkCreateDebugReportCallbackEXT)vkGetInstanceProcAddr(instance, "vkCreateDebugReportCallbackEXT");
pfn_vkDestroyDebugReportCallbackEXT = (PFN_vkDestroyDebugReportCallbackEXT)vkGetInstanceProcAddr(instance, "vkDestroyDebugReportCallbackEXT");
@ -1834,6 +1884,13 @@ void vkExtInitDevice(VkDevice device)
pfn_vkUpdateDescriptorSetWithTemplateKHR = (PFN_vkUpdateDescriptorSetWithTemplateKHR)vkGetDeviceProcAddr(device, "vkUpdateDescriptorSetWithTemplateKHR");
pfn_vkCmdPushDescriptorSetWithTemplateKHR = (PFN_vkCmdPushDescriptorSetWithTemplateKHR)vkGetDeviceProcAddr(device, "vkCmdPushDescriptorSetWithTemplateKHR");
#endif /* VK_KHR_descriptor_update_template */
#ifdef VK_KHR_shared_presentable_image
pfn_vkGetSwapchainStatusKHR = (PFN_vkGetSwapchainStatusKHR)vkGetDeviceProcAddr(device, "vkGetSwapchainStatusKHR");
#endif /* VK_KHR_shared_presentable_image */
#ifdef VK_KHR_get_surface_capabilities2
pfn_vkGetPhysicalDeviceSurfaceCapabilities2KHR = (PFN_vkGetPhysicalDeviceSurfaceCapabilities2KHR)vkGetDeviceProcAddr(device, "vkGetPhysicalDeviceSurfaceCapabilities2KHR");
pfn_vkGetPhysicalDeviceSurfaceFormats2KHR = (PFN_vkGetPhysicalDeviceSurfaceFormats2KHR)vkGetDeviceProcAddr(device, "vkGetPhysicalDeviceSurfaceFormats2KHR");
#endif /* VK_KHR_get_surface_capabilities2 */
#ifdef VK_EXT_debug_report
pfn_vkCreateDebugReportCallbackEXT = (PFN_vkCreateDebugReportCallbackEXT)vkGetDeviceProcAddr(device, "vkCreateDebugReportCallbackEXT");
pfn_vkDestroyDebugReportCallbackEXT = (PFN_vkDestroyDebugReportCallbackEXT)vkGetDeviceProcAddr(device, "vkDestroyDebugReportCallbackEXT");

View File

@ -67,6 +67,18 @@ class ValidityOutputGenerator(OutputGenerator):
def makeFLink(self, name):
return 'flink:' + name
# Create a unique namespaced Valid Usage anchor name given a
# blockname - command or structure
# pname - parameter or member (may be None)
# category - distinct implicit VU type
def makeAnchor(self, blockname, pname, category):
# For debugging
# return '* '
if pname != None:
return '* [[VUID-%s-%s-%s]] ' % (blockname, pname, category)
else:
return '* [[VUID-%s-%s]] ' % (blockname, category)
#
# Generate an include file
#
@ -248,12 +260,12 @@ class ValidityOutputGenerator(OutputGenerator):
#
# Make a chunk of text for the end of a parameter if it is an array
def makeAsciiDocPreChunk(self, param, params):
def makeAsciiDocPreChunk(self, blockname, param, params):
paramname = param.find('name')
paramtype = param.find('type')
# General pre-amble. Check optionality and add stuff.
asciidoc = '* '
asciidoc = self.makeAnchor(blockname, paramname.text, 'parameter')
if self.paramIsStaticArray(param):
asciidoc += 'Any given element of '
@ -318,12 +330,12 @@ class ValidityOutputGenerator(OutputGenerator):
#
# Make the generic asciidoc line chunk portion used for all parameters.
# May return an empty string if nothing to validate.
def createValidationLineForParameterIntroChunk(self, param, params, typetext):
def createValidationLineForParameterIntroChunk(self, blockname, param, params, typetext):
asciidoc = ''
paramname = param.find('name')
paramtype = param.find('type')
asciidoc += self.makeAsciiDocPreChunk(param, params)
asciidoc += self.makeAsciiDocPreChunk(blockname, param, params)
asciidoc += self.makeParameterName(paramname.text)
asciidoc += ' must: be '
@ -383,7 +395,7 @@ class ValidityOutputGenerator(OutputGenerator):
# If a value is "const" that means it won't get modified, so it must be valid going into the function.
if 'const' in param.text:
typecategory = self.getTypeCategory(paramtype.text)
if (typecategory != 'struct' and typecategory != 'union' and typecategory != 'basetype' and typecategory is not None) or not self.isStructAlwaysValid(paramtype.text):
if (typecategory != 'struct' and typecategory != 'union' and typecategory != 'basetype' and typecategory is not None) or not self.isStructAlwaysValid(blockname, paramtype.text):
asciidoc += 'valid '
asciidoc += typetext
@ -429,7 +441,7 @@ class ValidityOutputGenerator(OutputGenerator):
# Add additional line for non-optional bitmasks
if self.getTypeCategory(paramtype.text) == 'bitmask':
if param.attrib.get('optional') is None:
asciidoc += '* '
asciidoc += self.makeAnchor(blockname, paramname.text, 'requiredbitmask')
if self.paramIsArray(param):
asciidoc += 'Each element of '
asciidoc += 'pname:'
@ -439,15 +451,15 @@ class ValidityOutputGenerator(OutputGenerator):
return asciidoc
def makeAsciiDocLineForParameter(self, param, params, typetext):
def makeAsciiDocLineForParameter(self, blockname, param, params, typetext):
if param.attrib.get('noautovalidity') is not None:
return ''
asciidoc = self.createValidationLineForParameterIntroChunk(param, params, typetext)
asciidoc = self.createValidationLineForParameterIntroChunk(blockname, param, params, typetext)
return asciidoc
# Try to do check if a structure is always considered valid (i.e. there's no rules to its acceptance)
def isStructAlwaysValid(self, structname):
def isStructAlwaysValid(self, blockname, structname):
struct = self.registry.tree.find("types/type[@name='" + structname + "']")
@ -465,19 +477,19 @@ class ValidityOutputGenerator(OutputGenerator):
return False
if paramtype.text == 'void' or paramtype.text == 'char' or self.paramIsArray(param) or self.paramIsPointer(param):
if self.makeAsciiDocLineForParameter(param, params, '') != '':
if self.makeAsciiDocLineForParameter(blockname, param, params, '') != '':
return False
elif typecategory == 'handle' or typecategory == 'enum' or typecategory == 'bitmask' or param.attrib.get('returnedonly') == 'true':
return False
elif typecategory == 'struct' or typecategory == 'union':
if self.isStructAlwaysValid(paramtype.text) is False:
if self.isStructAlwaysValid(blockname, paramtype.text) is False:
return False
return True
#
# Make an entire asciidoc line for a given parameter
def createValidationLineForParameter(self, param, params, typecategory):
def createValidationLineForParameter(self, blockname, param, params, typecategory):
asciidoc = ''
paramname = param.find('name')
paramtype = param.find('type')
@ -486,37 +498,37 @@ class ValidityOutputGenerator(OutputGenerator):
# Chars and void are special cases - needs care inside the generator functions
# A null-terminated char array is a string, else it's chars.
# An array of void values is a byte array, a void pointer is just a pointer to nothing in particular
asciidoc += self.makeAsciiDocLineForParameter(param, params, '')
asciidoc += self.makeAsciiDocLineForParameter(blockname, param, params, '')
elif typecategory == 'bitmask':
bitsname = paramtype.text.replace('Flags', 'FlagBits')
if self.registry.tree.find("enums[@name='" + bitsname + "']") is None:
asciidoc += '* '
asciidoc += self.makeAnchor(blockname, paramname.text, 'zerobitmask')
asciidoc += self.makeParameterName(paramname.text)
asciidoc += ' must: be `0`'
asciidoc += '\n'
else:
if self.paramIsArray(param):
asciidoc += self.makeAsciiDocLineForParameter(param, params, 'combinations of ' + self.makeEnumerationName(bitsname) + ' value')
asciidoc += self.makeAsciiDocLineForParameter(blockname, param, params, 'combinations of ' + self.makeEnumerationName(bitsname) + ' value')
else:
asciidoc += self.makeAsciiDocLineForParameter(param, params, 'combination of ' + self.makeEnumerationName(bitsname) + ' values')
asciidoc += self.makeAsciiDocLineForParameter(blockname, param, params, 'combination of ' + self.makeEnumerationName(bitsname) + ' values')
elif typecategory == 'handle':
asciidoc += self.makeAsciiDocLineForParameter(param, params, self.makeStructName(paramtype.text) + ' handle')
asciidoc += self.makeAsciiDocLineForParameter(blockname, param, params, self.makeStructName(paramtype.text) + ' handle')
elif typecategory == 'enum':
asciidoc += self.makeAsciiDocLineForParameter(param, params, self.makeEnumerationName(paramtype.text) + ' value')
asciidoc += self.makeAsciiDocLineForParameter(blockname, param, params, self.makeEnumerationName(paramtype.text) + ' value')
elif typecategory == 'struct':
if (self.paramIsArray(param) or self.paramIsPointer(param)) or not self.isStructAlwaysValid(paramtype.text):
asciidoc += self.makeAsciiDocLineForParameter(param, params, self.makeStructName(paramtype.text) + ' structure')
if (self.paramIsArray(param) or self.paramIsPointer(param)) or not self.isStructAlwaysValid(blockname, paramtype.text):
asciidoc += self.makeAsciiDocLineForParameter(blockname, param, params, self.makeStructName(paramtype.text) + ' structure')
elif typecategory == 'union':
if (self.paramIsArray(param) or self.paramIsPointer(param)) or not self.isStructAlwaysValid(paramtype.text):
asciidoc += self.makeAsciiDocLineForParameter(param, params, self.makeStructName(paramtype.text) + ' union')
if (self.paramIsArray(param) or self.paramIsPointer(param)) or not self.isStructAlwaysValid(blockname, paramtype.text):
asciidoc += self.makeAsciiDocLineForParameter(blockname, param, params, self.makeStructName(paramtype.text) + ' union')
elif self.paramIsArray(param) or self.paramIsPointer(param):
asciidoc += self.makeAsciiDocLineForParameter(param, params, self.makeBaseTypeName(paramtype.text) + ' value')
asciidoc += self.makeAsciiDocLineForParameter(blockname, param, params, self.makeBaseTypeName(paramtype.text) + ' value')
return asciidoc
#
# Make an asciidoc validity entry for a handle's parent object
def makeAsciiDocHandleParent(self, param, params):
def makeAsciiDocHandleParent(self, blockname, param, params):
asciidoc = ''
paramname = param.find('name')
paramtype = param.find('type')
@ -529,7 +541,7 @@ class ValidityOutputGenerator(OutputGenerator):
if otherparam.find('type').text == handleparent:
parentreference = otherparam.find('name').text
if parentreference is not None:
asciidoc += '* '
asciidoc += self.makeAnchor(blockname, paramname.text, 'parent')
if self.isHandleOptional(param, params):
if self.paramIsArray(param):
@ -552,7 +564,7 @@ class ValidityOutputGenerator(OutputGenerator):
#
# Make an asciidoc validity entry for a common ancestors between handles
def makeAsciiDocHandlesCommonAncestor(self, handles, params):
def makeAsciiDocHandlesCommonAncestor(self, blockname, handles, params):
asciidoc = ''
if len(handles) > 1:
@ -596,7 +608,7 @@ class ValidityOutputGenerator(OutputGenerator):
if len(ancestormap.keys()) > 1:
asciidoc += '* '
asciidoc += self.makeAnchor(blockname, None, 'commonparent')
parametertexts = []
for param in ancestormap.keys():
@ -627,10 +639,10 @@ class ValidityOutputGenerator(OutputGenerator):
#
# Generate an asciidoc validity line for the sType value of a struct
def makeStructureType(self, blockname, param):
asciidoc = '* '
paramname = param.find('name')
paramtype = param.find('type')
asciidoc = self.makeAnchor(blockname, paramname.text, 'sType')
asciidoc += self.makeParameterName(paramname.text)
asciidoc += ' must: be '
@ -662,11 +674,11 @@ class ValidityOutputGenerator(OutputGenerator):
#
# Generate an asciidoc validity line for the pNext value of a struct
def makeStructureExtensionPointer(self, param):
asciidoc = '* '
def makeStructureExtensionPointer(self, blockname, param):
paramname = param.find('name')
paramtype = param.find('type')
asciidoc = self.makeAnchor(blockname, paramname.text, 'pNext')
validextensionstructs = param.attrib.get('validextensionstructs')
extensionstructs = []
@ -703,7 +715,8 @@ class ValidityOutputGenerator(OutputGenerator):
asciidoc += (', ').join(extensionstructs[:-1]) + ', or ' + extensionstructs[-1]
asciidoc += '\n'
asciidoc += '* Each pname:sType member in the pname:pNext chain must: be unique'
asciidoc += self.makeAnchor(blockname, 'sType', 'unique')
asciidoc += 'Each pname:sType member in the pname:pNext chain must: be unique'
asciidoc += '\n'
@ -723,6 +736,11 @@ class ValidityOutputGenerator(OutputGenerator):
paramname = param.find('name')
paramtype = param.find('type')
# Valid usage ID tags (VUID) are generated for various
# conditions based on the name of the block (structure or
# command), name of the element (member or parameter), and type
# of VU statement.
# Get the type's category
typecategory = self.getTypeCategory(paramtype.text)
@ -731,9 +749,9 @@ class ValidityOutputGenerator(OutputGenerator):
if paramtype.text == 'VkStructureType' and paramname.text == 'sType':
asciidoc += self.makeStructureType(blockname, param)
elif paramtype.text == 'void' and paramname.text == 'pNext':
asciidoc += self.makeStructureExtensionPointer(param)
asciidoc += self.makeStructureExtensionPointer(blockname, param)
else:
asciidoc += self.createValidationLineForParameter(param, params, typecategory)
asciidoc += self.createValidationLineForParameter(blockname, param, params, typecategory)
# Ensure that any parenting is properly validated, and list that a handle was found
if typecategory == 'handle':
@ -754,7 +772,7 @@ class ValidityOutputGenerator(OutputGenerator):
for queuetype in re.findall(r'([^,]+)', queuetypes):
queuebits.append(queuetype.replace('_',' '))
asciidoc += '* '
asciidoc += self.makeAnchor(blockname, None, 'queuetype')
asciidoc += 'The pname:queue must: support '
if len(queuebits) == 1:
asciidoc += queuebits[0]
@ -767,7 +785,7 @@ class ValidityOutputGenerator(OutputGenerator):
if 'vkCmd' in blockname:
# The commandBuffer parameter must be being recorded
asciidoc += '* '
asciidoc += self.makeAnchor(blockname, 'commandBuffer', 'recording')
asciidoc += 'pname:commandBuffer must: be in the <<commandbuffers-lifecycle, recording state>>'
asciidoc += '\n'
@ -777,7 +795,7 @@ class ValidityOutputGenerator(OutputGenerator):
for queuetype in re.findall(r'([^,]+)', queuetypes):
queuebits.append(queuetype.replace('_',' '))
asciidoc += '* '
asciidoc += self.makeAnchor(blockname, 'commandBuffer', 'cmdpool')
asciidoc += 'The sname:VkCommandPool that pname:commandBuffer was allocated from must: support '
if len(queuebits) == 1:
asciidoc += queuebits[0]
@ -792,7 +810,8 @@ class ValidityOutputGenerator(OutputGenerator):
renderpass = cmd.attrib.get('renderpass')
if renderpass != 'both':
asciidoc += '* This command must: only be called '
asciidoc += self.makeAnchor(blockname, None, 'renderpass')
asciidoc += 'This command must: only be called '
asciidoc += renderpass
asciidoc += ' of a render pass instance'
asciidoc += '\n'
@ -801,7 +820,8 @@ class ValidityOutputGenerator(OutputGenerator):
cmdbufferlevel = cmd.attrib.get('cmdbufferlevel')
if cmdbufferlevel != 'primary,secondary':
asciidoc += '* pname:commandBuffer must: be a '
asciidoc += self.makeAnchor(blockname, None, 'bufferlevel')
asciidoc += 'pname:commandBuffer must: be a '
asciidoc += cmdbufferlevel
asciidoc += ' sname:VkCommandBuffer'
asciidoc += '\n'
@ -819,7 +839,9 @@ class ValidityOutputGenerator(OutputGenerator):
optionalarrays = cmd.findall("param/[@len='" + arraylength + "'][@optional='true']")
optionalarrays.extend(cmd.findall("param/[@len='" + arraylength + "'][@noautovalidity='true']"))
asciidoc += '* '
# If arraylength can ever be not a legal part of an
# asciidoc anchor name, this will need to be altered.
asciidoc += self.makeAnchor(blockname, arraylength, 'arraylength')
# Allow lengths to be arbitrary if all their dependents are optional
if len(optionalarrays) == len(arrays) and len(optionalarrays) != 0:
@ -860,10 +882,10 @@ class ValidityOutputGenerator(OutputGenerator):
parent = self.getHandleParent(paramtype.text)
if parent is not None:
asciidoc += self.makeAsciiDocHandleParent(param, params)
asciidoc += self.makeAsciiDocHandleParent(blockname, param, params)
# Find the common ancestor of all objects referenced in this command
asciidoc += self.makeAsciiDocHandlesCommonAncestor(handles, params)
asciidoc += self.makeAsciiDocHandlesCommonAncestor(blockname, handles, params)
# In case there's nothing to report, return None
if asciidoc == '':

View File

@ -112,7 +112,7 @@ maintained in the master branch of the Khronos Vulkan GitHub project.
<type category="define">// Vulkan 1.0 version number
#define <name>VK_API_VERSION_1_0</name> <type>VK_MAKE_VERSION</type>(1, 0, 0)</type> <!-- The patch version here should never be set to anything other than 0 -->
<type category="define">// Version of this file
#define <name>VK_HEADER_VERSION</name> 48</type>
#define <name>VK_HEADER_VERSION</name> 49</type>
<type category="define">
#define <name>VK_DEFINE_HANDLE</name>(object) typedef struct object##_T* object;</type>
@ -365,6 +365,8 @@ maintained in the master branch of the Khronos Vulkan GitHub project.
<type name="VkAttachmentDescriptionFlagBits" category="enum"/>
<type name="VkDescriptorPoolCreateFlagBits" category="enum"/>
<type name="VkDependencyFlagBits" category="enum"/>
<type name="VkObjectType" category="enum"/>
<!-- Extensions -->
<type name="VkIndirectCommandsLayoutUsageFlagBitsNVX" category="enum"/>
<type name="VkIndirectCommandsTokenTypeNVX" category="enum"/>
<type name="VkObjectEntryUsageFlagBitsNVX" category="enum"/>
@ -628,7 +630,7 @@ maintained in the master branch of the Khronos Vulkan GitHub project.
<type category="struct" name="VkWriteDescriptorSet">
<member values="VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member><type>VkDescriptorSet</type> <name>dstSet</name></member> <!-- Destination descriptor set -->
<member noautovalidity="true"><type>VkDescriptorSet</type> <name>dstSet</name></member> <!-- Destination descriptor set -->
<member><type>uint32_t</type> <name>dstBinding</name></member> <!-- Binding within the destination descriptor set to write -->
<member><type>uint32_t</type> <name>dstArrayElement</name></member> <!-- Array element within the destination binding to write -->
<member><type>uint32_t</type> <name>descriptorCount</name></member> <!-- Number of descriptors to write (determines the size of the array pointed by pDescriptors) -->
@ -2253,6 +2255,26 @@ maintained in the master branch of the Khronos Vulkan GitHub project.
<member><type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member><type>VkBool32</type> <name>perViewPositionAllComponents</name></member>
</type>
<type category="struct" name="VkPhysicalDeviceSurfaceInfo2KHR">
<member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member>
<member><type>VkSurfaceKHR</type> <name>surface</name></member>
</type>
<type category="struct" name="VkSurfaceCapabilities2KHR" returnedonly="true">
<member values="VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR"><type>VkStructureType</type> <name>sType</name></member>
<member validextensionstructs="VkSharedPresentSurfaceCapabilitiesKHR"><type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member><type>VkSurfaceCapabilitiesKHR</type> <name>surfaceCapabilities</name></member>
</type>
<type category="struct" name="VkSurfaceFormat2KHR" returnedonly="true">
<member values="VK_STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR"><type>VkStructureType</type> <name>sType</name></member>
<member><type>void</type>* <name>pNext</name></member>
<member><type>VkSurfaceFormatKHR</type> <name>surfaceFormat</name></member>
</type>
<type category="struct" name="VkSharedPresentSurfaceCapabilitiesKHR" returnedonly="true">
<member values="VK_STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR"><type>VkStructureType</type> <name>sType</name></member>
<member noautovalidity="true"><type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member optional="true"><type>VkImageUsageFlags</type> <name>sharedPresentSupportedUsageFlags</name></member> <!-- Supported image usage flags if swapchain created using a shared present mode -->
</type>
</types>
<!-- SECTION: Vulkan enumerant (token) definitions. -->
@ -2788,6 +2810,34 @@ maintained in the master branch of the Khronos Vulkan GitHub project.
<enum value="0" name="VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET_KHR" comment="Create descriptor update template for descriptor set updates"/>
<enum value="1" name="VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR" comment="Create descriptor update template for pushed descriptor updates"/>
</enums>
<enums name="VkObjectType" type="enum" comment="Enums to track objects of various types">
<enum value="0" name="VK_OBJECT_TYPE_UNKNOWN"/>
<enum value="1" name="VK_OBJECT_TYPE_INSTANCE" comment="VkInstance"/>
<enum value="2" name="VK_OBJECT_TYPE_PHYSICAL_DEVICE" comment="VkPhysicalDevice"/>
<enum value="3" name="VK_OBJECT_TYPE_DEVICE" comment="VkDevice"/>
<enum value="4" name="VK_OBJECT_TYPE_QUEUE" comment="VkQueue"/>
<enum value="5" name="VK_OBJECT_TYPE_SEMAPHORE" comment="VkSemaphore"/>
<enum value="6" name="VK_OBJECT_TYPE_COMMAND_BUFFER" comment="VkCommandBuffer"/>
<enum value="7" name="VK_OBJECT_TYPE_FENCE" comment="VkFence"/>
<enum value="8" name="VK_OBJECT_TYPE_DEVICE_MEMORY" comment="VkDeviceMemory"/>
<enum value="9" name="VK_OBJECT_TYPE_BUFFER" comment="VkBuffer"/>
<enum value="10" name="VK_OBJECT_TYPE_IMAGE" comment="VkImage"/>
<enum value="11" name="VK_OBJECT_TYPE_EVENT" comment="VkEvent"/>
<enum value="12" name="VK_OBJECT_TYPE_QUERY_POOL" comment="VkQueryPool"/>
<enum value="13" name="VK_OBJECT_TYPE_BUFFER_VIEW" comment="VkBufferView"/>
<enum value="14" name="VK_OBJECT_TYPE_IMAGE_VIEW" comment="VkImageView"/>
<enum value="15" name="VK_OBJECT_TYPE_SHADER_MODULE" comment="VkShaderModule"/>
<enum value="16" name="VK_OBJECT_TYPE_PIPELINE_CACHE" comment="VkPipelineCache"/>
<enum value="17" name="VK_OBJECT_TYPE_PIPELINE_LAYOUT" comment="VkPipelineLayout"/>
<enum value="18" name="VK_OBJECT_TYPE_RENDER_PASS" comment="VkRenderPass"/>
<enum value="19" name="VK_OBJECT_TYPE_PIPELINE" comment="VkPipeline"/>
<enum value="20" name="VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT" comment="VkDescriptorSetLayout"/>
<enum value="21" name="VK_OBJECT_TYPE_SAMPLER" comment="VkSampler"/>
<enum value="22" name="VK_OBJECT_TYPE_DESCRIPTOR_POOL" comment="VkDescriptorPool"/>
<enum value="23" name="VK_OBJECT_TYPE_DESCRIPTOR_SET" comment="VkDescriptorSet"/>
<enum value="24" name="VK_OBJECT_TYPE_FRAMEBUFFER" comment="VkFramebuffer"/>
<enum value="25" name="VK_OBJECT_TYPE_COMMAND_POOL" comment="VkCommandPool"/>
</enums>
<!-- Flags -->
<enums name="VkQueueFlagBits" type="bitmask">
@ -3190,6 +3240,7 @@ maintained in the master branch of the Khronos Vulkan GitHub project.
<enums name="VkSubpassDescriptionFlagBits" type="bitmask">
</enums>
<!-- SECTION: Vulkan command definitions -->
<commands>
<command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_INITIALIZATION_FAILED,VK_ERROR_LAYER_NOT_PRESENT,VK_ERROR_EXTENSION_NOT_PRESENT,VK_ERROR_INCOMPATIBLE_DRIVER">
@ -4756,6 +4807,11 @@ maintained in the master branch of the Khronos Vulkan GitHub project.
<param len="swapchainCount">const <type>VkSwapchainKHR</type>* <name>pSwapchains</name></param> <!-- Swapchains to present an image from -->
<param len="swapchainCount">const <type>VkHdrMetadataEXT</type>* <name>pMetadata</name></param>
</command>
<command successcodes="VK_SUCCESS,VK_SUBOPTIMAL_KHR" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_DEVICE_LOST,VK_ERROR_OUT_OF_DATE_KHR,VK_ERROR_SURFACE_LOST_KHR">
<proto><type>VkResult</type> <name>vkGetSwapchainStatusKHR</name></proto>
<param><type>VkDevice</type> <name>device</name></param>
<param externsync="true"><type>VkSwapchainKHR</type> <name>swapchain</name></param>
</command>
<command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_DEVICE_LOST,VK_ERROR_SURFACE_LOST_KHR">
<proto><type>VkResult</type> <name>vkGetRefreshCycleDurationGOOGLE</name></proto>
<param><type>VkDevice</type> <name>device</name></param>
@ -4797,6 +4853,19 @@ maintained in the master branch of the Khronos Vulkan GitHub project.
<param><type>uint32_t</type> <name>discardRectangleCount</name></param>
<param len="discardRectangleCount">const <type>VkRect2D</type>* <name>pDiscardRectangles</name></param>
</command>
<command errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_SURFACE_LOST_KHR">
<proto><type>VkResult</type> <name>vkGetPhysicalDeviceSurfaceCapabilities2KHR</name></proto>
<param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
<param>const <type>VkPhysicalDeviceSurfaceInfo2KHR</type>* <name>pSurfaceInfo</name></param>
<param><type>VkSurfaceCapabilities2KHR</type>* <name>pSurfaceCapabilities</name></param>
</command>
<command successcodes="VK_SUCCESS,VK_INCOMPLETE" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_SURFACE_LOST_KHR">
<proto><type>VkResult</type> <name>vkGetPhysicalDeviceSurfaceFormats2KHR</name></proto>
<param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
<param>const <type>VkPhysicalDeviceSurfaceInfo2KHR</type>* <name>pSurfaceInfo</name></param>
<param optional="false,true"><type>uint32_t</type>* <name>pSurfaceFormatCount</name></param>
<param optional="true" len="pSurfaceFormatCount"><type>VkSurfaceFormat2KHR</type>* <name>pSurfaceFormats</name></param>
</command>
</commands>
<!-- SECTION: Vulkan API interface definitions -->
@ -5025,6 +5094,7 @@ maintained in the master branch of the Khronos Vulkan GitHub project.
<type name="VkDrawIndirectCommand"/>
<type name="VkImageMemoryBarrier"/>
<type name="VkMemoryBarrier"/>
<type name="VkObjectType"/>
</require>
</feature>
@ -5038,6 +5108,7 @@ maintained in the master branch of the Khronos Vulkan GitHub project.
<enum offset="0" dir="-" extends="VkResult" name="VK_ERROR_SURFACE_LOST_KHR"/>
<enum offset="1" dir="-" extends="VkResult" name="VK_ERROR_NATIVE_WINDOW_IN_USE_KHR"/>
<enum value="VK_COLOR_SPACE_SRGB_NONLINEAR_KHR" name="VK_COLORSPACE_SRGB_NONLINEAR_KHR"/>
<enum offset="0" extends="VkObjectType" name="VK_OBJECT_TYPE_SURFACE_KHR" comment="VkSurfaceKHR"/>
<command name="vkDestroySurfaceKHR"/>
<command name="vkGetPhysicalDeviceSurfaceSupportKHR"/>
<command name="vkGetPhysicalDeviceSurfaceCapabilitiesKHR"/>
@ -5054,6 +5125,7 @@ maintained in the master branch of the Khronos Vulkan GitHub project.
<enum offset="2" extends="VkImageLayout" name="VK_IMAGE_LAYOUT_PRESENT_SRC_KHR"/>
<enum offset="3" extends="VkResult" name="VK_SUBOPTIMAL_KHR"/>
<enum offset="4" dir="-" extends="VkResult" name="VK_ERROR_OUT_OF_DATE_KHR"/>
<enum offset="0" extends="VkObjectType" name="VK_OBJECT_TYPE_SWAPCHAIN_KHR" comment="VkSwapchainKHR"/>
<command name="vkCreateSwapchainKHR"/>
<command name="vkDestroySwapchainKHR"/>
<command name="vkGetSwapchainImagesKHR"/>
@ -5067,6 +5139,8 @@ maintained in the master branch of the Khronos Vulkan GitHub project.
<enum value="&quot;VK_KHR_display&quot;" name="VK_KHR_DISPLAY_EXTENSION_NAME"/>
<enum offset="0" extends="VkStructureType" name="VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR"/>
<enum offset="1" extends="VkStructureType" name="VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR"/>
<enum offset="0" extends="VkObjectType" name="VK_OBJECT_TYPE_DISPLAY_KHR" comment="VkDisplayKHR"/>
<enum offset="1" extends="VkObjectType" name="VK_OBJECT_TYPE_DISPLAY_MODE_KHR" comment="VkDisplayModeKHR"/>
<type name="VkDisplayPlaneAlphaFlagsKHR"/>
<type name="VkDisplayPlaneAlphaFlagBitsKHR"/>
<type name="VkDisplayPropertiesKHR"/>
@ -5174,6 +5248,7 @@ maintained in the master branch of the Khronos Vulkan GitHub project.
<enum offset="0" extends="VkStructureType" name="VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT"/>
<enum offset="1" dir="-" extends="VkResult" name="VK_ERROR_VALIDATION_FAILED_EXT"/>
<enum value="VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT" name="VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT"/>
<enum offset="0" extends="VkObjectType" name="VK_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT" comment="VkDebugReportCallbackEXT"/>
<type name="VkDebugReportObjectTypeEXT"/>
<type name="VkDebugReportErrorEXT"/>
<command name="vkCreateDebugReportCallbackEXT"/>
@ -5848,6 +5923,7 @@ maintained in the master branch of the Khronos Vulkan GitHub project.
<enum value="&quot;VK_KHR_descriptor_update_template&quot;" name="VK_KHR_DESCRIPTOR_UPDATE_TEMPLATE_EXTENSION_NAME"/>
<enum offset="0" extends="VkStructureType" name="VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO_KHR"/>
<enum offset="0" extends="VkDebugReportObjectTypeEXT" name="VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR_EXT"/>
<enum offset="0" extends="VkObjectType" name="VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR" comment="VkDescriptorUpdateTemplateKHR"/>
<command name="vkCreateDescriptorUpdateTemplateKHR"/>
<command name="vkDestroyDescriptorUpdateTemplateKHR"/>
<command name="vkUpdateDescriptorSetWithTemplateKHR"/>
@ -5872,6 +5948,8 @@ maintained in the master branch of the Khronos Vulkan GitHub project.
<enum bitpos="17" extends="VkPipelineStageFlagBits" name="VK_PIPELINE_STAGE_COMMAND_PROCESS_BIT_NVX"/>
<enum bitpos="17" extends="VkAccessFlagBits" name="VK_ACCESS_COMMAND_PROCESS_READ_BIT_NVX"/>
<enum bitpos="18" extends="VkAccessFlagBits" name="VK_ACCESS_COMMAND_PROCESS_WRITE_BIT_NVX"/>
<enum offset="0" extends="VkObjectType" name="VK_OBJECT_TYPE_OBJECT_TABLE_NVX" comment="VkobjectTableNVX"/>
<enum offset="1" extends="VkObjectType" name="VK_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NVX" comment="VkIndirectCommandsLayoutNVX"/>
<type name="VkObjectTableNVX"/>
<type name="VkIndirectCommandsLayoutNVX"/>
<type name="VkIndirectCommandsLayoutUsageFlagsNVX"/>
@ -6118,10 +6196,16 @@ maintained in the master branch of the Khronos Vulkan GitHub project.
<enum value="&quot;VK_IMG_extension_111&quot;" name="VK_IMG_EXTENSION_111_EXTENSION_NAME"/>
</require>
</extension>
<extension name="VK_KHR_extension_112" number="112" author="KHR" contact="Alon Or-bach @alonorbach" supported="disabled">
<extension name="VK_KHR_shared_presentable_image" number="112" type="device" requires="VK_KHR_surface,VK_KHR_swapchain,VK_KHR_get_physical_device_properties2,VK_KHR_get_surface_capabilities2" author="KHR" contact="Alon Or-bach @alonorbach" supported="vulkan">
<require>
<enum value="0" name="VK_KHR_EXTENSION_112_SPEC_VERSION"/>
<enum value="&quot;VK_KHR_extension_112&quot;" name="VK_KHR_EXTENSION_112_EXTENSION_NAME"/>
<enum value="1" name="VK_KHR_SHARED_PRESENTABLE_IMAGE_SPEC_VERSION"/>
<enum value="&quot;VK_KHR_shared_presentable_image&quot;" name="VK_KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME"/>
<enum offset="0" extends="VkStructureType" name="VK_STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR"/>
<enum offset="0" extends="VkPresentModeKHR" name="VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR"/>
<enum offset="1" extends="VkPresentModeKHR" name="VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR"/>
<enum offset="0" extends="VkImageLayout" name="VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR"/>
<type name="VkSharedPresentSurfaceCapabilitiesKHR"/>
<command name="vkGetSwapchainStatusKHR"/>
</require>
</extension>
<extension name="VK_KHR_extension_113" number="113" author="KHX" contact="Cass Everitt @casseveritt" supported="disabled">
@ -6166,10 +6250,18 @@ maintained in the master branch of the Khronos Vulkan GitHub project.
<enum value="&quot;VK_KHR_extension_119&quot;" name="VK_KHR_EXTENSION_119_EXTENSION_NAME"/>
</require>
</extension>
<extension name="VK_KHR_extension_120" number="120" author="KHR" contact="James Jones @cubanismo" supported="disabled">
<extension name="VK_KHR_get_surface_capabilities2" number="120" type="instance" requires="VK_KHR_surface" author="KHR" contact="James Jones @cubanismo" supported="vulkan">
<require>
<enum value="0" name="VK_KHR_EXTENSION_120_SPEC_VERSION"/>
<enum value="&quot;VK_KHR_extension_120&quot;" name="VK_KHR_EXTENSION_120_EXTENSION_NAME"/>
<enum value="1" name="VK_KHR_GET_SURFACE_CAPABILITIES_2_SPEC_VERSION"/>
<enum value="&quot;VK_KHR_get_surface_capabilities2&quot;" name="VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME"/>
<enum offset="0" extends="VkStructureType" name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR"/>
<enum offset="1" extends="VkStructureType" name="VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR"/>
<enum offset="2" extends="VkStructureType" name="VK_STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR"/>
<type name="VkPhysicalDeviceSurfaceInfo2KHR"/>
<type name="VkSurfaceCapabilities2KHR"/>
<type name="VkSurfaceFormat2KHR"/>
<command name="vkGetPhysicalDeviceSurfaceCapabilities2KHR"/>
<command name="vkGetPhysicalDeviceSurfaceFormats2KHR"/>
</require>
</extension>
<extension name="VK_KHR_variable_pointers" number="121" author="KHR" contact="John Kessenich @johnk" supported="disabled">
@ -6378,5 +6470,23 @@ maintained in the master branch of the Khronos Vulkan GitHub project.
<enum value="&quot;VK_NV_extension_153&quot;" name="VK_NV_EXTENSION_153_EXTENSION_NAME"/>
</require>
</extension>
<extension name="VK_NV_extension_154" number="154" author="NV" contact="Jeff Bolz @jbolz" supported="disabled">
<require>
<enum value="0" name="VK_NV_EXTENSION_154_SPEC_VERSION"/>
<enum value="&quot;VK_NV_extension_154&quot;" name="VK_NV_EXTENSION_154_EXTENSION_NAME"/>
</require>
</extension>
<extension name="VK_NV_extension_155" number="155" author="NV" contact="Jeff Bolz @jbolz" supported="disabled">
<require>
<enum value="0" name="VK_NV_EXTENSION_155_SPEC_VERSION"/>
<enum value="&quot;VK_NV_extension_155&quot;" name="VK_NV_EXTENSION_155_EXTENSION_NAME"/>
</require>
</extension>
<extension name="VK_NV_extension_156" number="156" author="NV" contact="Jeff Bolz @jbolz" supported="disabled">
<require>
<enum value="0" name="VK_NV_EXTENSION_156_SPEC_VERSION"/>
<enum value="&quot;VK_NV_extension_156&quot;" name="VK_NV_EXTENSION_156_EXTENSION_NAME"/>
</require>
</extension>
</extensions>
</registry>

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 48
#define VK_HEADER_VERSION 49
#define VK_NULL_HANDLE 0
@ -298,6 +298,10 @@ typedef enum VkStructureType {
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT = 1000099000,
VK_STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT = 1000099001,
VK_STRUCTURE_TYPE_HDR_METADATA_EXT = 1000105000,
VK_STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR = 1000111000,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR = 1000119000,
VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR = 1000119001,
VK_STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR = 1000119002,
VK_STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK = 1000122000,
VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK = 1000123000,
VK_STRUCTURE_TYPE_BEGIN_RANGE = VK_STRUCTURE_TYPE_APPLICATION_INFO,
@ -587,6 +591,7 @@ typedef enum VkImageLayout {
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL = 7,
VK_IMAGE_LAYOUT_PREINITIALIZED = 8,
VK_IMAGE_LAYOUT_PRESENT_SRC_KHR = 1000001002,
VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR = 1000111000,
VK_IMAGE_LAYOUT_BEGIN_RANGE = VK_IMAGE_LAYOUT_UNDEFINED,
VK_IMAGE_LAYOUT_END_RANGE = VK_IMAGE_LAYOUT_PREINITIALIZED,
VK_IMAGE_LAYOUT_RANGE_SIZE = (VK_IMAGE_LAYOUT_PREINITIALIZED - VK_IMAGE_LAYOUT_UNDEFINED + 1),
@ -893,6 +898,47 @@ typedef enum VkSubpassContents {
VK_SUBPASS_CONTENTS_MAX_ENUM = 0x7FFFFFFF
} VkSubpassContents;
typedef enum VkObjectType {
VK_OBJECT_TYPE_UNKNOWN = 0,
VK_OBJECT_TYPE_INSTANCE = 1,
VK_OBJECT_TYPE_PHYSICAL_DEVICE = 2,
VK_OBJECT_TYPE_DEVICE = 3,
VK_OBJECT_TYPE_QUEUE = 4,
VK_OBJECT_TYPE_SEMAPHORE = 5,
VK_OBJECT_TYPE_COMMAND_BUFFER = 6,
VK_OBJECT_TYPE_FENCE = 7,
VK_OBJECT_TYPE_DEVICE_MEMORY = 8,
VK_OBJECT_TYPE_BUFFER = 9,
VK_OBJECT_TYPE_IMAGE = 10,
VK_OBJECT_TYPE_EVENT = 11,
VK_OBJECT_TYPE_QUERY_POOL = 12,
VK_OBJECT_TYPE_BUFFER_VIEW = 13,
VK_OBJECT_TYPE_IMAGE_VIEW = 14,
VK_OBJECT_TYPE_SHADER_MODULE = 15,
VK_OBJECT_TYPE_PIPELINE_CACHE = 16,
VK_OBJECT_TYPE_PIPELINE_LAYOUT = 17,
VK_OBJECT_TYPE_RENDER_PASS = 18,
VK_OBJECT_TYPE_PIPELINE = 19,
VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT = 20,
VK_OBJECT_TYPE_SAMPLER = 21,
VK_OBJECT_TYPE_DESCRIPTOR_POOL = 22,
VK_OBJECT_TYPE_DESCRIPTOR_SET = 23,
VK_OBJECT_TYPE_FRAMEBUFFER = 24,
VK_OBJECT_TYPE_COMMAND_POOL = 25,
VK_OBJECT_TYPE_SURFACE_KHR = 1000000000,
VK_OBJECT_TYPE_SWAPCHAIN_KHR = 1000001000,
VK_OBJECT_TYPE_DISPLAY_KHR = 1000002000,
VK_OBJECT_TYPE_DISPLAY_MODE_KHR = 1000002001,
VK_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT = 1000011000,
VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR = 1000085000,
VK_OBJECT_TYPE_OBJECT_TABLE_NVX = 1000086000,
VK_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NVX = 1000086001,
VK_OBJECT_TYPE_BEGIN_RANGE = VK_OBJECT_TYPE_UNKNOWN,
VK_OBJECT_TYPE_END_RANGE = VK_OBJECT_TYPE_COMMAND_POOL,
VK_OBJECT_TYPE_RANGE_SIZE = (VK_OBJECT_TYPE_COMMAND_POOL - VK_OBJECT_TYPE_UNKNOWN + 1),
VK_OBJECT_TYPE_MAX_ENUM = 0x7FFFFFFF
} VkObjectType;
typedef VkFlags VkInstanceCreateFlags;
typedef enum VkFormatFeatureFlagBits {
@ -3320,6 +3366,8 @@ typedef enum VkPresentModeKHR {
VK_PRESENT_MODE_MAILBOX_KHR = 1,
VK_PRESENT_MODE_FIFO_KHR = 2,
VK_PRESENT_MODE_FIFO_RELAXED_KHR = 3,
VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR = 1000111000,
VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR = 1000111001,
VK_PRESENT_MODE_BEGIN_RANGE_KHR = VK_PRESENT_MODE_IMMEDIATE_KHR,
VK_PRESENT_MODE_END_RANGE_KHR = VK_PRESENT_MODE_FIFO_RELAXED_KHR,
VK_PRESENT_MODE_RANGE_SIZE_KHR = (VK_PRESENT_MODE_FIFO_RELAXED_KHR - VK_PRESENT_MODE_IMMEDIATE_KHR + 1),
@ -4098,6 +4146,64 @@ VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSetWithTemplateKHR(
const void* pData);
#endif
#define VK_KHR_shared_presentable_image 1
#define VK_KHR_SHARED_PRESENTABLE_IMAGE_SPEC_VERSION 1
#define VK_KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME "VK_KHR_shared_presentable_image"
typedef struct VkSharedPresentSurfaceCapabilitiesKHR {
VkStructureType sType;
void* pNext;
VkImageUsageFlags sharedPresentSupportedUsageFlags;
} VkSharedPresentSurfaceCapabilitiesKHR;
typedef VkResult (VKAPI_PTR *PFN_vkGetSwapchainStatusKHR)(VkDevice device, VkSwapchainKHR swapchain);
#ifndef VK_NO_PROTOTYPES
VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainStatusKHR(
VkDevice device,
VkSwapchainKHR swapchain);
#endif
#define VK_KHR_get_surface_capabilities2 1
#define VK_KHR_GET_SURFACE_CAPABILITIES_2_SPEC_VERSION 1
#define VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME "VK_KHR_get_surface_capabilities2"
typedef struct VkPhysicalDeviceSurfaceInfo2KHR {
VkStructureType sType;
const void* pNext;
VkSurfaceKHR surface;
} VkPhysicalDeviceSurfaceInfo2KHR;
typedef struct VkSurfaceCapabilities2KHR {
VkStructureType sType;
void* pNext;
VkSurfaceCapabilitiesKHR surfaceCapabilities;
} VkSurfaceCapabilities2KHR;
typedef struct VkSurfaceFormat2KHR {
VkStructureType sType;
void* pNext;
VkSurfaceFormatKHR surfaceFormat;
} VkSurfaceFormat2KHR;
typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceCapabilities2KHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, VkSurfaceCapabilities2KHR* pSurfaceCapabilities);
typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceSurfaceFormats2KHR)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo, uint32_t* pSurfaceFormatCount, VkSurfaceFormat2KHR* pSurfaceFormats);
#ifndef VK_NO_PROTOTYPES
VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceCapabilities2KHR(
VkPhysicalDevice physicalDevice,
const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo,
VkSurfaceCapabilities2KHR* pSurfaceCapabilities);
VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceSurfaceFormats2KHR(
VkPhysicalDevice physicalDevice,
const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo,
uint32_t* pSurfaceFormatCount,
VkSurfaceFormat2KHR* pSurfaceFormats);
#endif
#define VK_EXT_debug_report 1
VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDebugReportCallbackEXT)