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:
parent
757a1232e6
commit
685295031d
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
|
@ -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
|
|
@ -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[]
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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]]
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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`
|
||||
****
|
||||
|
||||
|
|
|
@ -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.
|
||||
****
|
||||
|
||||
|
|
|
@ -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>>.
|
||||
****
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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[]
|
||||
|
|
|
@ -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
|
||||
****
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
****
|
||||
|
|
|
@ -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[]
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 engine’s 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.
|
||||
====
|
||||
|
||||
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
****
|
||||
|
||||
|
|
|
@ -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[]
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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[]
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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[]
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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[]
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
****
|
||||
|
||||
|
|
|
@ -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.
|
||||
****
|
||||
|
||||
|
|
|
@ -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[]
|
||||
|
|
|
@ -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.
|
||||
****
|
||||
|
|
|
@ -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`
|
||||
****
|
||||
|
||||
|
|
|
@ -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.
|
||||
****
|
||||
|
||||
|
|
|
@ -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
|
||||
****
|
||||
|
||||
|
|
|
@ -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
|
||||
****
|
||||
|
|
|
@ -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.
|
||||
****
|
||||
|
||||
|
|
|
@ -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[]
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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`.
|
||||
****
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
|
@ -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
|
||||
****
|
||||
|
|
|
@ -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
|
||||
****
|
||||
|
|
|
@ -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.
|
||||
****
|
||||
|
|
|
@ -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[]
|
||||
|
|
|
@ -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.
|
||||
====
|
||||
|
|
|
@ -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.
|
||||
****
|
||||
|
||||
|
|
|
@ -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
|
||||
****
|
||||
|
||||
|
|
|
@ -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
|
||||
****
|
||||
|
||||
|
|
|
@ -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
|
||||
****
|
||||
|
||||
|
|
|
@ -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`
|
||||
****
|
||||
|
||||
|
|
|
@ -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[]
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
****
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
****
|
||||
|
||||
|
|
|
@ -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
|
||||
****
|
||||
|
||||
|
|
|
@ -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`
|
||||
****
|
||||
|
||||
|
|
|
@ -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`
|
||||
****
|
||||
|
||||
|
|
|
@ -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.
|
||||
****
|
||||
|
||||
|
|
|
@ -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
|
||||
****
|
||||
|
|
|
@ -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
|
||||
****
|
||||
|
||||
|
|
|
@ -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]
|
||||
|
|
|
@ -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[]
|
||||
|
|
|
@ -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' ]
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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
|
|
@ -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
|
|
@ -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"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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,
|
||||
|
|
|
@ -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')
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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.
|
|
@ -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.
|
||||
====
|
||||
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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");
|
||||
|
|
|
@ -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 == '':
|
||||
|
|
126
src/spec/vk.xml
126
src/spec/vk.xml
|
@ -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=""VK_KHR_display"" 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=""VK_KHR_descriptor_update_template"" 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=""VK_IMG_extension_111"" 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=""VK_KHR_extension_112"" name="VK_KHR_EXTENSION_112_EXTENSION_NAME"/>
|
||||
<enum value="1" name="VK_KHR_SHARED_PRESENTABLE_IMAGE_SPEC_VERSION"/>
|
||||
<enum value=""VK_KHR_shared_presentable_image"" 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=""VK_KHR_extension_119"" 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=""VK_KHR_extension_120"" name="VK_KHR_EXTENSION_120_EXTENSION_NAME"/>
|
||||
<enum value="1" name="VK_KHR_GET_SURFACE_CAPABILITIES_2_SPEC_VERSION"/>
|
||||
<enum value=""VK_KHR_get_surface_capabilities2"" 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=""VK_NV_extension_153"" 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=""VK_NV_extension_154"" 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=""VK_NV_extension_155"" 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=""VK_NV_extension_156"" name="VK_NV_EXTENSION_156_EXTENSION_NAME"/>
|
||||
</require>
|
||||
</extension>
|
||||
</extensions>
|
||||
</registry>
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
Loading…
Reference in New Issue