mirror of
https://github.com/status-im/Vulkan-Docs.git
synced 2025-02-21 18:48:12 +00:00
* Vulkan 1.1 initial release. Bump API patch number and header version number to 70 for this update. The patch number will be used for both Vulkan 1.1 and Vulkan 1.0 updates, and continues to increment continuously from the previous Vulkan 1.0.69 update. NOTE: We are not publishing an updated 1.0.70 specification, or 1.1 reference pages, along with 1.1.70. There are still minor issues to work out with those build targets. However, we will soon generate all three types of documents as part of the regular spec update cycle. NOTE: The GitHub KhronosGroup/Vulkan-Docs repository now maintains the current specification in the `master` branch. The `1.0` branch is out of date and will not be maintained, since we will be generating both 1.1 and 1.0 specifications from the `master` branch in the future. Github Issues: * Clarify how mapped memory ranges are flushed in flink:vkFlushMappedMemoryRanges (public issue 127). * Specify that <<synchronization-pipeline-stages, Pipeline Stages>> are a list of tasks that each command performs, rather than necessarily being discrete pieces of hardware that one task flows through. Add a "`synchronization command`" pipeline type which all synchronization command execute (it's just TOP + BOTTOM), with an explanatory note (public issue 554). Internal Issues: * Regenerate all images used in the spec in Inkscape with a consistent look-and-feel, and adjust image size attributes so they're all legible, and not too large with respect to the spec body text (internal issue 701). * Document in the <<extensions,extensions>> appendix and in the style guide that `KHX` extensions are no longer supported or used in the Vulkan 1.1 timeframe (internal issue 714). * Remove the leftover equations_temp directory after PDF build completes (internal issue 925). * Update the <<credits, Credits (Informative)>> appendix to include contributors to Vulkan 1.1, and to list them according to the API version(s) they contributed to (internal issue 987). * Add a NOTE to the introduction explaining that interfaces defined by extensions which were promoted to Vulkan 1.1 are now expressed as aliases of the Vulkan 1.1 type (internal issue 991). * Instrument spec source conditionals so spec can be built with 1.1 features, extensions promoted to 1.1, or both (internal issues 992, 998). * Modify the XML schema and tools to support explicit aliasing of types, structures, and commands, and use this to express the promotion of 1.0 extensions to 1.1 core features, by making the extension interfaces aliases of the core features they were promoted to. Mark up promoted interfaces to allow still generating 1.0 + extension specifications (internal issue 991). * Platform names, along with corresponding preprocessor symbols to enable extensions specific to those platforms, are now reserved in vk.xml using the <platform> tag. Update the registry schema and schema specification to match (internal issue 1011). * Updated the <<textures-texel-replacement, Texel Replacement>> section to clarify that reads from invalid texels for image resources result in undefined values (internal issue 1014). * Modify description of patch version so it continues to increment across minor version changes (internal issue 1033). * Clarify and unify language describing physical device-level core and extension functionality in the <<fundamentals-validusage-extensions, Valid Usage for Extensions>>, <<fundamentals-validusage-versions, Valid Usage for Newer Core Versions>>, <<initialization-functionpointers Command Function Pointers>>, <<initialization-phys-dev-extensions, Extending Physical Device From Device Extensions>> <<extended-functionality-instance-extensions-and-devices, Instance Extensions and Device Extensions>> sections and for flink:vkGetPhysicalDeviceImageFormatProperties2. This documents that instance-level functionality is tied to the loader, and independent of the ICD; physical device-level functionality is tied to the ICD, and associated with device extensions; physical devices are treated more uniformly between core and extensions; and instance and physical versions can be different (internal issue 1048). * Updated the <<commandbuffers-lifecycle, Command Buffer Lifecycle>> section to clarify the ability for pending command buffers to transition to the invalid state after submission, and add a command buffer lifecycle diagram (internal issue 1050). * Clarify that some flink:VkDescriptorUpdateTemplateCreateInfo parameters are ignored when push descriptors are not supported (internal issue 1054). * Specify that flink:vkCreateImage will return an error if the image is too large, in a NOTE in the slink:VkImageFormatProperties description (internal issue 1078). * Remove near-duplicate NOTEs about when to query function pointers dynamically in the <<initialization, Initialization>> chapter and replace by extending the NOTE in the <<fundamentals-abi, Application Binary Interface>> section (internal issue 1085). * Restore missing references to "`Sparse Resource Features`" in the flink:VkBufferCreateFlagBits description (internal issue 1086). * Tidy up definitions of descriptor types in the `GL_KHR_vulkan_glsl` specification, the <<descriptorsets, Resource Descriptors>> section and its subsections, and the <<interfaces-resources-descset, Descriptor Set Interface>> for consistency, reduction of duplicate information, and removal of GLSL correspondance/examples (internal issue 1090). * Correctly describe code:PrimitiveId as an Input for tessellation control and evaluation shaders, not an Output (internal issue 1109). * Relax the requirements on chroma offsets for nearest filtering in <<textures-implict-reconstruction, Implicit Reconstruction>> (internal issue 1116). Other Issues: * Clarify the intended relationship between specification language and certain terms defined in the Khronos Intellectual Property Rights policy. Specific changes include: ** Rewrote IP/Copyright preamble and introduction to better agree with normative language both as laid out in the introduction, and the Khronos IPR policy. ** Added notion of fully informative sections, which are now tagged with "`(Informative)`" in their titles. ** Removed non-normative uses of the phrase "`not required`" ** Clarified the distinction between terms "`optional`" and "`not required:`" as they relate to the IPR Policy, and updated specification text to use terms consistent with the intent. ** Reduced additions to RFC 2119, and ensured the specification agreed with the leaner language. ** Removed the terms "`hardware`", "`software`", "`CPU`", and "`GPU`" from normative text. ** Moved several paragraphs that should not have been normative to informative notes. ** Clarified a number of definitions in the Glossary. ** Updated the document writing guide to match new terminology changes. * Explicitly state in the <<fundamentals-objectmodel-lifetime-acquire, application memory lifetime>> language that that for objects other than descriptor sets, a slink:VkDescriptorSetLayout object used in the creation of another object (such as slink:VkPipelineLayout or slink:VkDescriptorUpdateTemplateKHR) is only in use during the creation of that object and can be safely destroyed afterwards. * Updated the <<textures-scale-factor, Scale Factor Operation>> section to use the ratio of anisotropy, rather than the integer sample rate, to perform the LOD calculation. The spec still allows use of the sample rate as the value used to calculate the LOD, but no longer requires it. * Update `vulkan_ext.c` to include all platform-related definitions from the Vulkan platform headers, following the split of the headers into platform-specific and non-platform-specific files. * Fix bogus anchor name in the <<commandbuffers, Command Buffers>> chapter which accidentally duplicated an anchor in the pipelines chapter. There were no reference to this anchor, fortunately. * Add valid usage statement for slink:VkWriteDescriptorSet and slink:VkCopyDescriptorSet requiring that the slink:VkDescriptorSetLayout used to allocate the source and destination sets must not have been destroyed at the time flink:vkUpdateDescriptorSets is called. * Document mapping of subgroup barrier functions to SPIR-V, and clarify a place where subgroupBarrier sounds like it's execution-only in the standalone `GL_KHR_shader_subgroup` specification. * Use an HTML stylesheet derived from the Asciidoctor `colony` theme, with the default Arial font family replaced by the sans-serif Noto font family. * Numerous minor updates to README.adoc, build scripts, Makefiles, and registry and style guide specifications to support Vulkan 1.1 outputs, use them as defaults, and remove mention of `KHX` extensions, which are no longer supported. New Extensions: * `VK_EXT_vertex_attrib_divisor`
381 lines
15 KiB
Plaintext
381 lines
15 KiB
Plaintext
// Copyright (c) 2015-2018 Khronos Group. This work is licensed under a
|
|
// Creative Commons Attribution 4.0 International License; see
|
|
// http://creativecommons.org/licenses/by/4.0/
|
|
|
|
[[initialization]]
|
|
= Initialization
|
|
|
|
Before using Vulkan, an application must: initialize it by loading the
|
|
Vulkan commands, and creating a sname:VkInstance object.
|
|
|
|
|
|
[[initialization-functionpointers]]
|
|
== Command Function Pointers
|
|
|
|
[open,refpage='vkGetInstanceProcAddr',desc='Return a function pointer for a command',type='protos',xrefs='PFN_vkVoidFunction']
|
|
--
|
|
|
|
Vulkan commands are not necessarily exposed statically on a platform.
|
|
Function pointers for all Vulkan commands can: be obtained with the command:
|
|
|
|
include::../api/protos/vkGetInstanceProcAddr.txt[]
|
|
|
|
* pname:instance is the instance that the function pointer will be
|
|
compatible with, or `NULL` for commands not dependent on any instance.
|
|
* pname:pName is the name of the command to obtain.
|
|
|
|
fname:vkGetInstanceProcAddr itself is obtained in a platform- and loader-
|
|
specific manner.
|
|
Typically, the loader library will export this command as a function symbol,
|
|
so applications can: link against the loader library, or load it dynamically
|
|
and look up the symbol using platform-specific APIs.
|
|
|
|
The table below defines the various use cases for
|
|
fname:vkGetInstanceProcAddr and expected return value ("`fp`" is "`function
|
|
pointer`") for each case.
|
|
|
|
The returned function pointer is of type tlink:PFN_vkVoidFunction, and must
|
|
be cast to the type of the command being queried.
|
|
|
|
.vkGetInstanceProcAddr behavior
|
|
[width="80%",options="header"]
|
|
|====
|
|
| pname:instance | pname:pName | return value
|
|
| * | `NULL` | undefined
|
|
| invalid instance | * | undefined
|
|
ifdef::VK_VERSION_1_1[]
|
|
| `NULL` | flink:vkEnumerateInstanceVersion | fp
|
|
endif::VK_VERSION_1_1[]
|
|
| `NULL` | flink:vkEnumerateInstanceExtensionProperties | fp
|
|
| `NULL` | flink:vkEnumerateInstanceLayerProperties | fp
|
|
| `NULL` | flink:vkCreateInstance | fp
|
|
| `NULL` | * (any pname:pName not covered above) | `NULL`
|
|
| instance | core Vulkan command | fp^1^
|
|
| instance | enabled instance extension commands for pname:instance | fp^1^
|
|
| instance | available device extension^2^ commands for pname:instance | fp^1^
|
|
| instance | * (any pname:pName not covered above) | `NULL`
|
|
|====
|
|
|
|
1::
|
|
The returned function pointer must: only be called with a dispatchable
|
|
object (the first parameter) that is pname:instance or a child of
|
|
pname:instance, e.g. slink:VkInstance, slink:VkPhysicalDevice,
|
|
slink:VkDevice, slink:VkQueue, or slink:VkCommandBuffer.
|
|
|
|
2::
|
|
An "`available device extension`" is a device extension supported by any
|
|
physical device enumerated by pname:instance.
|
|
|
|
include::../validity/protos/vkGetInstanceProcAddr.txt[]
|
|
--
|
|
|
|
[open,refpage='vkGetDeviceProcAddr',desc='Return a function pointer for a command',type='protos',xrefs='PFN_vkVoidFunction']
|
|
--
|
|
|
|
In order to support systems with multiple Vulkan implementations, the
|
|
function pointers returned by fname:vkGetInstanceProcAddr may: point to
|
|
dispatch code that calls a different real implementation for different
|
|
slink:VkDevice objects or their child objects.
|
|
The overhead of the internal dispatch for slink:VkDevice objects can be
|
|
avoided by obtaining device-specific function pointers for any commands that
|
|
use a device or device-child object as their dispatchable object.
|
|
Such function pointers can: be obtained with the command:
|
|
|
|
include::../api/protos/vkGetDeviceProcAddr.txt[]
|
|
|
|
The table below defines the various use cases for fname:vkGetDeviceProcAddr
|
|
and expected return value for each case.
|
|
|
|
The returned function pointer is of type tlink:PFN_vkVoidFunction, and must
|
|
be cast to the type of the command being queried.
|
|
The function pointer must: only be called with a dispatchable object (the
|
|
first parameter) that is pname:device or a child of pname:device.
|
|
|
|
.vkGetDeviceProcAddr behavior
|
|
[width="80%",options="header"]
|
|
|====
|
|
| pname:device | pname:pName | return value
|
|
| `NULL` | * | undefined
|
|
| invalid device | * | undefined
|
|
| device | `NULL` | undefined
|
|
| device | core device-level Vulkan command | fp
|
|
| device | enabled device extension commands | fp
|
|
| device | * (any pname:pName not covered above) | `NULL`
|
|
|====
|
|
|
|
include::../validity/protos/vkGetDeviceProcAddr.txt[]
|
|
|
|
--
|
|
|
|
[open,refpage='PFN_vkVoidFunction',desc='Dummy function pointer type returned by queries',type='funcpointers',xrefs='vkGetDeviceProcAddr vkGetInstanceProcAddr']
|
|
--
|
|
|
|
The definition of tlink:PFN_vkVoidFunction is:
|
|
|
|
include::../api/funcpointers/PFN_vkVoidFunction.txt[]
|
|
|
|
--
|
|
|
|
|
|
ifdef::VK_VERSION_1_1[]
|
|
|
|
=== Extending Physical Device Core Functionality
|
|
|
|
New core physical-device-level functionality can: be used when the
|
|
physical-device version is greater than or equal to the version of Vulkan
|
|
that added the new functionality.
|
|
The Vulkan version supported by a physical device can: be obtained by
|
|
calling flink:vkGetPhysicalDeviceProperties.
|
|
|
|
endif::VK_VERSION_1_1[]
|
|
|
|
|
|
ifdef::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
|
|
|
|
[[initialization-phys-dev-extensions]]
|
|
=== Extending Physical Device From Device Extensions
|
|
|
|
When the `<<VK_KHR_get_physical_device_properties2>>` extension is enabled,
|
|
ifdef::VK_VERSION_1_1[]
|
|
or when both the instance and the physical-device versions are at least 1.1,
|
|
endif::VK_VERSION_1_1[]
|
|
physical-device-level functionality of a device extension can: be used with
|
|
a physical device if the corresponding extension is enumerated by
|
|
flink:vkEnumerateDeviceExtensionProperties for that physical device, even
|
|
before a logical device has been created.
|
|
|
|
To obtain a function pointer for a physical-device-level command from a
|
|
device extension, an application can: use flink:vkGetInstanceProcAddr.
|
|
This function pointer may: point to dispatch code, which calls a different
|
|
real implementation for different sname:VkPhysicalDevice objects.
|
|
Behavior is undefined if an extension physical-device command is called on a
|
|
physical device that does not support the extension.
|
|
|
|
Device extensions may: define structures that can: be added to the
|
|
ptext:pNext chain of physical-device-level commands.
|
|
Behavior is undefined if such an extension structure is passed to a
|
|
physical-device-level command for a physical device that does not support
|
|
the extension.
|
|
|
|
endif::VK_VERSION_1_1,VK_KHR_get_physical_device_properties2[]
|
|
|
|
|
|
[[initialization-instances]]
|
|
== Instances
|
|
|
|
[open,refpage='VkInstance',desc='Opaque handle to a instance object',type='handles']
|
|
--
|
|
|
|
There is no global state in Vulkan and all per-application state is stored
|
|
in a sname:VkInstance object.
|
|
Creating a sname:VkInstance object initializes the Vulkan library and allows
|
|
the application to pass information about itself to the implementation.
|
|
|
|
Instances are represented by sname:VkInstance handles:
|
|
|
|
include::../api/handles/VkInstance.txt[]
|
|
|
|
--
|
|
|
|
ifdef::VK_VERSION_1_1[]
|
|
|
|
[open,refpage='vkEnumerateInstanceVersion',desc='Query instance-level version before instance creation',type='protos']
|
|
--
|
|
|
|
The version of Vulkan that is supported by an instance may: be different
|
|
than the version of Vulkan supported by a device or physical device.
|
|
To query properties that can: be used in creating an instance, call:
|
|
|
|
include::../api/protos/vkEnumerateInstanceVersion.txt[]
|
|
|
|
* pname:pApiVersion points to a code:uint32_t, which is is the version of
|
|
Vulkan supported by instance-level functionality, encoded as described
|
|
in the <<fundamentals-versionnum,API Version Numbers and Semantics>>
|
|
section.
|
|
|
|
include::../validity/protos/vkEnumerateInstanceVersion.txt[]
|
|
|
|
--
|
|
endif::VK_VERSION_1_1[]
|
|
|
|
[open,refpage='vkCreateInstance',desc='Create a new Vulkan instance',type='protos']
|
|
--
|
|
|
|
To create an instance object, call:
|
|
|
|
include::../api/protos/vkCreateInstance.txt[]
|
|
|
|
* pname:pCreateInfo points to an instance of slink:VkInstanceCreateInfo
|
|
controlling creation of the instance.
|
|
* pname:pAllocator controls host memory allocation as described in the
|
|
<<memory-allocation, Memory Allocation>> chapter.
|
|
* pname:pInstance points a sname:VkInstance handle in which the resulting
|
|
instance is returned.
|
|
|
|
fname:vkCreateInstance verifies that the requested layers exist.
|
|
If not, fname:vkCreateInstance will return ename:VK_ERROR_LAYER_NOT_PRESENT.
|
|
Next fname:vkCreateInstance verifies that the requested extensions are
|
|
supported (e.g. in the implementation or in any enabled instance layer) and
|
|
if any requested extension is not supported, fname:vkCreateInstance must:
|
|
return ename:VK_ERROR_EXTENSION_NOT_PRESENT.
|
|
After verifying and enabling the instance layers and extensions the
|
|
sname:VkInstance object is created and returned to the application.
|
|
If a requested extension is only supported by a layer, both the layer and
|
|
the extension need to be specified at fname:vkCreateInstance time for the
|
|
creation to succeed.
|
|
|
|
.Valid Usage
|
|
****
|
|
* [[VUID-vkCreateInstance-ppEnabledExtensionNames-01388]]
|
|
All <<extended-functionality-extensions-dependencies, required
|
|
extensions>> for each extension in the
|
|
slink:VkInstanceCreateInfo::pname:ppEnabledExtensionNames list must:
|
|
also be present in that list.
|
|
****
|
|
|
|
include::../validity/protos/vkCreateInstance.txt[]
|
|
--
|
|
|
|
[open,refpage='VkInstanceCreateInfo',desc='Structure specifying parameters of a newly created instance',type='structs']
|
|
--
|
|
|
|
The sname:VkInstanceCreateInfo structure is defined as:
|
|
|
|
include::../api/structs/VkInstanceCreateInfo.txt[]
|
|
|
|
* pname:sType is the type of this structure.
|
|
* pname:pNext is `NULL` or a pointer to an extension-specific structure.
|
|
* pname:flags is reserved for future use.
|
|
* pname:pApplicationInfo is `NULL` or a pointer to an instance of
|
|
sname:VkApplicationInfo.
|
|
If not `NULL`, this information helps implementations recognize behavior
|
|
inherent to classes of applications.
|
|
slink:VkApplicationInfo is defined in detail below.
|
|
* pname:enabledLayerCount is the number of global layers to enable.
|
|
* pname:ppEnabledLayerNames is a pointer to an array of
|
|
pname:enabledLayerCount null-terminated UTF-8 strings containing the
|
|
names of layers to enable for the created instance.
|
|
See the <<extended-functionality-layers,Layers>> section for further
|
|
details.
|
|
* pname:enabledExtensionCount is the number of global extensions to
|
|
enable.
|
|
* pname:ppEnabledExtensionNames is a pointer to an array of
|
|
pname:enabledExtensionCount null-terminated UTF-8 strings containing the
|
|
names of extensions to enable.
|
|
|
|
include::../validity/structs/VkInstanceCreateInfo.txt[]
|
|
--
|
|
|
|
[open,refpage='VkInstanceCreateFlags',desc='Reserved for future use',type='enums']
|
|
--
|
|
include::../api/flags/VkInstanceCreateFlags.txt[]
|
|
|
|
sname:VkInstanceCreateFlags is a bitmask type for setting a mask, but is
|
|
currently reserved for future use.
|
|
--
|
|
|
|
ifdef::VK_EXT_validation_flags[]
|
|
include::VK_EXT_validation_flags.txt[]
|
|
endif::VK_EXT_validation_flags[]
|
|
|
|
|
|
[open,refpage='VkApplicationInfo',desc='Structure specifying application info',type='structs']
|
|
--
|
|
|
|
The sname:VkApplicationInfo structure is defined as:
|
|
|
|
include::../api/structs/VkApplicationInfo.txt[]
|
|
|
|
* pname:sType is the type of this structure.
|
|
* pname:pNext is `NULL` or a pointer to an extension-specific structure.
|
|
* pname:pApplicationName is `NULL` or is a pointer to a null-terminated
|
|
UTF-8 string containing the name of the application.
|
|
* pname:applicationVersion is an unsigned integer variable containing the
|
|
developer-supplied version number of the application.
|
|
* pname:pEngineName is `NULL` or is a pointer to a null-terminated UTF-8
|
|
string containing the name of the engine (if any) used to create the
|
|
application.
|
|
* pname:engineVersion is an unsigned integer variable containing the
|
|
developer-supplied version number of the engine used to create the
|
|
application.
|
|
ifndef::VK_VERSION_1_1[]
|
|
* pname:apiVersion is the version of the Vulkan API against which the
|
|
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,
|
|
or an effective substitute for pname:apiVersion, it must: return
|
|
ename:VK_ERROR_INCOMPATIBLE_DRIVER.
|
|
endif::VK_VERSION_1_1[]
|
|
ifdef::VK_VERSION_1_1[]
|
|
* pname:apiVersion must: be the highest version of Vulkan that the
|
|
application is designed to use, encoded as described in the
|
|
<<fundamentals-versionnum,API Version Numbers and Semantics>> section.
|
|
endif::VK_VERSION_1_1[]
|
|
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.
|
|
|
|
ifdef::VK_VERSION_1_1[]
|
|
Vulkan 1.0 implementations were required to return
|
|
ename:VK_ERROR_INCOMPATIBLE_DRIVER if pname:apiVersion was larger than 1.0.
|
|
Implementations that support Vulkan 1.1 or later must: not return
|
|
ename:VK_ERROR_INCOMPATIBLE_DRIVER for any value of pname:apiVersion.
|
|
|
|
[NOTE]
|
|
.Note
|
|
====
|
|
Because Vulkan 1.0 implementations may: fail with
|
|
ename:VK_ERROR_INCOMPATIBLE_DRIVER, applications should: determine the
|
|
version of Vulkan available before calling flink:vkCreateInstance.
|
|
If the flink:vkGetInstanceProcAddr returns `NULL` for
|
|
flink:vkEnumerateInstanceVersion, it is a Vulkan 1.0 implementation.
|
|
Otherwise, the application can: call flink:vkEnumerateInstanceVersion to
|
|
determine the version of Vulkan.
|
|
====
|
|
|
|
Implicit layers must: be disabled if they do not support a version at least
|
|
as high as pname:apiVersion.
|
|
See the <<LoaderAndValidationLayers, "Vulkan Loader Specification and
|
|
Architecture Overview">> document for additional information.
|
|
|
|
[NOTE]
|
|
.Note
|
|
====
|
|
Providing a `NULL` sname:VkInstanceCreateInfo::pname:pApplicationInfo or
|
|
providing an pname:apiVersion of 0 is equivalent to providing an
|
|
pname:apiVersion of VK_MAKE_VERSION(1,0,0).
|
|
====
|
|
endif::VK_VERSION_1_1[]
|
|
|
|
include::../validity/structs/VkApplicationInfo.txt[]
|
|
--
|
|
|
|
[open,refpage='vkDestroyInstance',desc='Destroy an instance of Vulkan',type='protos']
|
|
--
|
|
|
|
To destroy an instance, call:
|
|
|
|
include::../api/protos/vkDestroyInstance.txt[]
|
|
|
|
* pname:instance is the handle of the instance to destroy.
|
|
* pname:pAllocator controls host memory allocation as described in the
|
|
<<memory-allocation, Memory Allocation>> chapter.
|
|
|
|
.Valid Usage
|
|
****
|
|
* [[VUID-vkDestroyInstance-instance-00629]]
|
|
All child objects created using pname:instance must: have been destroyed
|
|
prior to destroying pname:instance
|
|
* [[VUID-vkDestroyInstance-instance-00630]]
|
|
If sname:VkAllocationCallbacks were provided when pname:instance was
|
|
created, a compatible set of callbacks must: be provided here
|
|
* [[VUID-vkDestroyInstance-instance-00631]]
|
|
If no sname:VkAllocationCallbacks were provided when pname:instance was
|
|
created, pname:pAllocator must: be `NULL`
|
|
****
|
|
|
|
include::../validity/protos/vkDestroyInstance.txt[]
|
|
--
|