Copyright (c) 2015-2016 The Khronos Group Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and/or associated documentation files (the "Materials"), to deal in the Materials without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Materials, and to permit persons to whom the Materials are furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Materials. THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. ------------------------------------------------------------------------ This file, vk.xml, is the Vulkan API Registry. It is a critically important and normative part of the Vulkan Specification, including a canonical machine-readable definition of the API, parameter and member validation language incorporated into the Specification and reference pages, and other material which is registered by Khronos, such as tags used by extension and layer authors. The only authoritative version of vk.xml is the one maintained in the master branch of the Khronos Vulkan Github project. #include "vk_platform.h" #include "vulkan.h" #include <X11/Xlib.h> #include <android/native_window.h> #include <mir_toolkit/client_types.h> #include <wayland-client.h> #include <windows.h> #include <xcb/xcb.h> #define VK_MAKE_VERSION(major, minor, patch) \ (((major) << 22) | ((minor) << 12) | (patch)) #define VK_VERSION_MAJOR(version) ((uint32_t)(version) >> 22) #define VK_VERSION_MINOR(version) (((uint32_t)(version) >> 12) & 0x3ff) #define VK_VERSION_PATCH(version) ((uint32_t)(version) & 0xfff) // Vulkan API version supported by this file #define VK_API_VERSION VK_MAKE_VERSION(1, 0, 3) #define VK_DEFINE_HANDLE(object) typedef struct object##_T* object; #if defined(__LP64__) || defined(_WIN64) || defined(__x86_64__) || defined(_M_X64) || defined(__ia64) || defined (_M_IA64) || defined(__aarch64__) || defined(__powerpc64__) #define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef struct object##_T *object; #else #define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef uint64_t object; #endif #define VK_NULL_HANDLE 0 typedef uint32_t VkSampleMask; typedef uint32_t VkBool32; typedef uint32_t VkFlags; typedef uint64_t VkDeviceSize; typedef VkFlags VkFramebufferCreateFlags; typedef VkFlags VkQueryPoolCreateFlags; typedef VkFlags VkRenderPassCreateFlags; typedef VkFlags VkSamplerCreateFlags; typedef VkFlags VkPipelineLayoutCreateFlags; typedef VkFlags VkPipelineCacheCreateFlags; typedef VkFlags VkPipelineDepthStencilStateCreateFlags; typedef VkFlags VkPipelineDynamicStateCreateFlags; typedef VkFlags VkPipelineColorBlendStateCreateFlags; typedef VkFlags VkPipelineMultisampleStateCreateFlags; typedef VkFlags VkPipelineRasterizationStateCreateFlags; typedef VkFlags VkPipelineViewportStateCreateFlags; typedef VkFlags VkPipelineTessellationStateCreateFlags; typedef VkFlags VkPipelineInputAssemblyStateCreateFlags; typedef VkFlags VkPipelineVertexInputStateCreateFlags; typedef VkFlags VkPipelineShaderStageCreateFlags; typedef VkFlags VkDescriptorSetLayoutCreateFlags; typedef VkFlags VkBufferViewCreateFlags; typedef VkFlags VkInstanceCreateFlags; typedef VkFlags VkDeviceCreateFlags; typedef VkFlags VkDeviceQueueCreateFlags; typedef VkFlags VkQueueFlags; typedef VkFlags VkMemoryPropertyFlags; typedef VkFlags VkMemoryHeapFlags; typedef VkFlags VkAccessFlags; typedef VkFlags VkBufferUsageFlags; typedef VkFlags VkBufferCreateFlags; typedef VkFlags VkShaderStageFlags; typedef VkFlags VkImageUsageFlags; typedef VkFlags VkImageCreateFlags; typedef VkFlags VkImageViewCreateFlags; typedef VkFlags VkPipelineCreateFlags; typedef VkFlags VkColorComponentFlags; typedef VkFlags VkFenceCreateFlags; typedef VkFlags VkSemaphoreCreateFlags; typedef VkFlags VkFormatFeatureFlags; typedef VkFlags VkQueryControlFlags; typedef VkFlags VkQueryResultFlags; typedef VkFlags VkShaderModuleCreateFlags; typedef VkFlags VkEventCreateFlags; typedef VkFlags VkCommandPoolCreateFlags; typedef VkFlags VkCommandPoolResetFlags; typedef VkFlags VkCommandBufferResetFlags; typedef VkFlags VkCommandBufferUsageFlags; typedef VkFlags VkQueryPipelineStatisticFlags; typedef VkFlags VkMemoryMapFlags; typedef VkFlags VkImageAspectFlags; typedef VkFlags VkSparseMemoryBindFlags; typedef VkFlags VkSparseImageFormatFlags; typedef VkFlags VkSubpassDescriptionFlags; typedef VkFlags VkPipelineStageFlags; typedef VkFlags VkSampleCountFlags; typedef VkFlags VkAttachmentDescriptionFlags; typedef VkFlags VkStencilFaceFlags; typedef VkFlags VkCullModeFlags; typedef VkFlags VkDescriptorPoolCreateFlags; typedef VkFlags VkDescriptorPoolResetFlags; typedef VkFlags VkDependencyFlags; typedef VkFlags VkCompositeAlphaFlagsKHR; typedef VkFlags VkDisplayPlaneAlphaFlagsKHR; typedef VkFlags VkSurfaceTransformFlagsKHR; typedef VkFlags VkSwapchainCreateFlagsKHR; typedef VkFlags VkDisplayModeCreateFlagsKHR; typedef VkFlags VkDisplaySurfaceCreateFlagsKHR; typedef VkFlags VkAndroidSurfaceCreateFlagsKHR; typedef VkFlags VkMirSurfaceCreateFlagsKHR; typedef VkFlags VkWaylandSurfaceCreateFlagsKHR; typedef VkFlags VkWin32SurfaceCreateFlagsKHR; typedef VkFlags VkXlibSurfaceCreateFlagsKHR; typedef VkFlags VkXcbSurfaceCreateFlagsKHR; typedef VkFlags VkDebugReportFlagsEXT; VK_DEFINE_HANDLE(VkInstance) VK_DEFINE_HANDLE(VkPhysicalDevice) VK_DEFINE_HANDLE(VkDevice) VK_DEFINE_HANDLE(VkQueue) VK_DEFINE_HANDLE(VkCommandBuffer) VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDeviceMemory) VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkCommandPool) VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkBuffer) VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkBufferView) VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkImage) VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkImageView) VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkShaderModule) VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPipeline) VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPipelineLayout) VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSampler) VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorSet) VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorSetLayout) VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDescriptorPool) VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkFence) VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSemaphore) VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkEvent) VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkQueryPool) VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkFramebuffer) VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkRenderPass) VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPipelineCache) VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDisplayKHR) VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDisplayModeKHR) VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSurfaceKHR) VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSwapchainKHR) VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDebugReportCallbackEXT) typedef void (VKAPI_PTR *PFN_vkInternalAllocationNotification)( void* pUserData, size_t size, VkInternalAllocationType allocationType, VkSystemAllocationScope allocationScope); typedef void (VKAPI_PTR *PFN_vkInternalFreeNotification)( void* pUserData, size_t size, VkInternalAllocationType allocationType, VkSystemAllocationScope allocationScope); typedef void* (VKAPI_PTR *PFN_vkReallocationFunction)( void* pUserData, void* pOriginal, size_t size, size_t alignment, VkSystemAllocationScope allocationScope); typedef void* (VKAPI_PTR *PFN_vkAllocationFunction)( void* pUserData, size_t size, size_t alignment, VkSystemAllocationScope allocationScope); typedef void (VKAPI_PTR *PFN_vkFreeFunction)( void* pUserData, void* pMemory); typedef void (VKAPI_PTR *PFN_vkVoidFunction)(void); typedef VkBool32 (VKAPI_PTR *PFN_vkDebugReportCallbackEXT)( VkDebugReportFlagsEXT flags, VkDebugReportObjectTypeEXT objectType, uint64_t object, size_t location, int32_t messageCode, const char* pLayerPrefix, const char* pMessage, void* pUserData); int32_t x int32_t y int32_t x int32_t y int32_t z uint32_t width uint32_t height uint32_t width uint32_t height uint32_t depth float x float y float width float height float minDepth float maxDepth pname:width must: be greater than `0.0` and less than or equal to sname:VkPhysicalDeviceLimits::pname:maxViewportDimensions[0] pname:height must: be greater than `0.0` and less than or equal to sname:VkPhysicalDeviceLimits::pname:maxViewportDimensions[1] 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 pname:viewportBoundsRange[1] 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 VkOffset2D offset VkExtent2D extent VkOffset3D offset VkExtent3D extent VkRect2D rect uint32_t baseArrayLayer uint32_t layerCount VkComponentSwizzle r VkComponentSwizzle g VkComponentSwizzle b VkComponentSwizzle a uint32_t maxImageDimension1D uint32_t maxImageDimension2D uint32_t maxImageDimension3D uint32_t maxImageDimensionCube uint32_t maxImageArrayLayers uint32_t maxTexelBufferElements uint32_t maxUniformBufferRange uint32_t maxStorageBufferRange uint32_t maxPushConstantsSize uint32_t maxMemoryAllocationCount uint32_t maxSamplerAllocationCount VkDeviceSize bufferImageGranularity VkDeviceSize sparseAddressSpaceSize uint32_t maxBoundDescriptorSets uint32_t maxPerStageDescriptorSamplers uint32_t maxPerStageDescriptorUniformBuffers uint32_t maxPerStageDescriptorStorageBuffers uint32_t maxPerStageDescriptorSampledImages uint32_t maxPerStageDescriptorStorageImages uint32_t maxPerStageDescriptorInputAttachments uint32_t maxPerStageResources uint32_t maxDescriptorSetSamplers uint32_t maxDescriptorSetUniformBuffers uint32_t maxDescriptorSetUniformBuffersDynamic uint32_t maxDescriptorSetStorageBuffers uint32_t maxDescriptorSetStorageBuffersDynamic uint32_t maxDescriptorSetSampledImages uint32_t maxDescriptorSetStorageImages uint32_t maxDescriptorSetInputAttachments uint32_t maxVertexInputAttributes uint32_t maxVertexInputBindings uint32_t maxVertexInputAttributeOffset uint32_t maxVertexInputBindingStride uint32_t maxVertexOutputComponents uint32_t maxTessellationGenerationLevel uint32_t maxTessellationPatchSize uint32_t maxTessellationControlPerVertexInputComponents uint32_t maxTessellationControlPerVertexOutputComponents uint32_t maxTessellationControlPerPatchOutputComponents uint32_t maxTessellationControlTotalOutputComponents uint32_t maxTessellationEvaluationInputComponents uint32_t maxTessellationEvaluationOutputComponents uint32_t maxGeometryShaderInvocations uint32_t maxGeometryInputComponents uint32_t maxGeometryOutputComponents uint32_t maxGeometryOutputVertices uint32_t maxGeometryTotalOutputComponents uint32_t maxFragmentInputComponents uint32_t maxFragmentOutputAttachments uint32_t maxFragmentDualSrcAttachments uint32_t maxFragmentCombinedOutputResources uint32_t maxComputeSharedMemorySize uint32_t maxComputeWorkGroupCount[3] uint32_t maxComputeWorkGroupInvocations uint32_t maxComputeWorkGroupSize[3] uint32_t subPixelPrecisionBits uint32_t subTexelPrecisionBits uint32_t mipmapPrecisionBits uint32_t maxDrawIndexedIndexValue uint32_t maxDrawIndirectCount float maxSamplerLodBias float maxSamplerAnisotropy uint32_t maxViewports uint32_t maxViewportDimensions[2] float viewportBoundsRange[2] uint32_t viewportSubPixelBits size_t minMemoryMapAlignment VkDeviceSize minTexelBufferOffsetAlignment VkDeviceSize minUniformBufferOffsetAlignment VkDeviceSize minStorageBufferOffsetAlignment int32_t minTexelOffset uint32_t maxTexelOffset int32_t minTexelGatherOffset uint32_t maxTexelGatherOffset float minInterpolationOffset float maxInterpolationOffset uint32_t subPixelInterpolationOffsetBits uint32_t maxFramebufferWidth uint32_t maxFramebufferHeight uint32_t maxFramebufferLayers VkSampleCountFlags framebufferColorSampleCounts VkSampleCountFlags framebufferDepthSampleCounts VkSampleCountFlags framebufferStencilSampleCounts VkSampleCountFlags framebufferNoAttachmentsSampleCounts uint32_t maxColorAttachments VkSampleCountFlags sampledImageColorSampleCounts VkSampleCountFlags sampledImageIntegerSampleCounts VkSampleCountFlags sampledImageDepthSampleCounts VkSampleCountFlags sampledImageStencilSampleCounts VkSampleCountFlags storageImageSampleCounts uint32_t maxSampleMaskWords VkBool32 timestampComputeAndGraphics float timestampPeriod uint32_t maxClipDistances uint32_t maxCullDistances uint32_t maxCombinedClipAndCullDistances uint32_t discreteQueuePriorities float pointSizeRange[2] float lineWidthRange[2] float pointSizeGranularity float lineWidthGranularity VkBool32 strictLines VkBool32 standardSampleLocations VkDeviceSize optimalBufferCopyOffsetAlignment VkDeviceSize optimalBufferCopyRowPitchAlignment VkDeviceSize nonCoherentAtomSize VkBool32 robustBufferAccess VkBool32 fullDrawIndexUint32 VkBool32 imageCubeArray VkBool32 independentBlend VkBool32 geometryShader VkBool32 tessellationShader VkBool32 sampleRateShading VkBool32 dualSrcBlend VkBool32 logicOp VkBool32 multiDrawIndirect VkBool32 drawIndirectFirstInstance VkBool32 depthClamp VkBool32 depthBiasClamp VkBool32 fillModeNonSolid VkBool32 depthBounds VkBool32 wideLines VkBool32 largePoints VkBool32 alphaToOne VkBool32 multiViewport VkBool32 samplerAnisotropy VkBool32 textureCompressionETC2 VkBool32 textureCompressionASTC_LDR VkBool32 textureCompressionBC VkBool32 occlusionQueryPrecise VkBool32 pipelineStatisticsQuery VkBool32 vertexPipelineStoresAndAtomics VkBool32 fragmentStoresAndAtomics VkBool32 shaderTessellationAndGeometryPointSize VkBool32 shaderImageGatherExtended VkBool32 shaderStorageImageExtendedFormats VkBool32 shaderStorageImageMultisample VkBool32 shaderStorageImageReadWithoutFormat VkBool32 shaderStorageImageWriteWithoutFormat VkBool32 shaderUniformBufferArrayDynamicIndexing VkBool32 shaderSampledImageArrayDynamicIndexing VkBool32 shaderStorageBufferArrayDynamicIndexing VkBool32 shaderStorageImageArrayDynamicIndexing VkBool32 shaderClipDistance VkBool32 shaderCullDistance VkBool32 shaderFloat64 VkBool32 shaderInt64 VkBool32 shaderInt16 VkBool32 shaderResourceResidency VkBool32 shaderResourceMinLod VkBool32 sparseBinding VkBool32 sparseResidencyBuffer VkBool32 sparseResidencyImage2D VkBool32 sparseResidencyImage3D VkBool32 sparseResidency2Samples VkBool32 sparseResidency4Samples VkBool32 sparseResidency8Samples VkBool32 sparseResidency16Samples VkBool32 sparseResidencyAliased VkBool32 variableMultisampleRate VkBool32 inheritedQueries If the value of 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 VkBool32 residencyStandard2DBlockShape VkBool32 residencyStandard2DMultisampleBlockShape VkBool32 residencyStandard3DBlockShape VkBool32 residencyAlignedMipSize VkBool32 residencyNonResidentStrict uint32_t apiVersion uint32_t driverVersion uint32_t vendorID uint32_t deviceID VkPhysicalDeviceType deviceType char deviceName[VK_MAX_PHYSICAL_DEVICE_NAME_SIZE] uint8_t pipelineCacheUUID[VK_UUID_SIZE] VkPhysicalDeviceLimits limits VkPhysicalDeviceSparseProperties sparseProperties char extensionName[VK_MAX_EXTENSION_NAME_SIZE] uint32_t specVersion char layerName[VK_MAX_EXTENSION_NAME_SIZE] uint32_t specVersion uint32_t implementationVersion char description[VK_MAX_DESCRIPTION_SIZE] VkStructureType sType const void* pNext const char* pApplicationName uint32_t applicationVersion const char* pEngineName uint32_t engineVersion uint32_t apiVersion pname:apiVersion must: be zero, or otherwise it must: be a version that the implementation supports, or supports an effective substitute for void* pUserData PFN_vkAllocationFunction pfnAllocation PFN_vkReallocationFunction pfnReallocation PFN_vkFreeFunction pfnFree PFN_vkInternalAllocationNotification pfnInternalAllocation PFN_vkInternalFreeNotification pfnInternalFree pname:pfnAllocation must: be a pointer to a valid user-defined PFN_vkAllocationFunction pname:pfnReallocation must: be a pointer to a valid user-defined PFN_vkReallocationFunction pname:pfnFree must: be a pointer to a valid user-defined PFN_vkFreeFunction If either of pname:pfnInternalAllocatione or pname:pfnInternalFree is not `NULL`, both must: be valid callbacks VkStructureType sType const void* pNext VkDeviceQueueCreateFlags flags uint32_t queueFamilyIndex uint32_t queueCount const float* pQueuePriorities pname:queueFamilyIndex must: be less than the value of pname:pQueueFamilyPropertyCount returned by fname:vkGetPhysicalDeviceQueueFamilyProperties pname:queueCount must: be less than or equal to the value of the pname:queueCount member of the sname:VkQueueFamilyProperties structure, as returned by fname:vkGetPhysicalDeviceQueueFamilyProperties in the pname:pQueueFamilyProperties[pname:queueFamilyIndex] The value of any given element of pname:pQueuePriorities must: be between `0.0` and `1.0` inclusive VkStructureType sType const void* pNext VkDeviceCreateFlags flags uint32_t queueCreateInfoCount const VkDeviceQueueCreateInfo* pQueueCreateInfos uint32_t enabledLayerCount const char* const* ppEnabledLayerNames uint32_t enabledExtensionCount const char* const* ppEnabledExtensionNames const VkPhysicalDeviceFeatures* pEnabledFeatures Any given element of pname:ppEnabledLayerNames must: be the name of a layer present on the system, exactly matching a string returned in the sname:VkLayerProperties structure by fname:vkEnumerateDeviceLayerProperties Any given element of pname:ppEnabledExtensionNames must: be the name of an extension present on the system, exactly matching a string returned in the sname:VkExtensionProperties structure by fname:vkEnumerateDeviceExtensionProperties If an extension listed in pname:ppEnabledExtensionNames is provided as part of a layer, then both the layer and extension must: be enabled to enable that extension The pname:queueFamilyIndex member of any given element of pname:pQueueCreateInfos must: be unique within pname:pQueueCreateInfos VkStructureType sType const void* pNext VkInstanceCreateFlags flags const VkApplicationInfo* pApplicationInfo uint32_t enabledLayerCount const char* const* ppEnabledLayerNames uint32_t enabledExtensionCount const char* const* ppEnabledExtensionNames Any given element of pname:ppEnabledLayerNames must: be the name of a layer present on the system, exactly matching a string returned in the sname:VkLayerProperties structure by fname:vkEnumerateInstanceLayerProperties Any given element of pname:ppEnabledExtensionNames must: be the name of an extension present on the system, exactly matching a string returned in the sname:VkExtensionProperties structure by fname:vkEnumerateInstanceExtensionProperties If an extension listed in pname:ppEnabledExtensionNames is provided as part of a layer, then both the layer and extension must: be enabled to enable that extension VkQueueFlags queueFlags uint32_t queueCount uint32_t timestampValidBits VkExtent3D minImageTransferGranularity VkStructureType sType const void* pNext VkDeviceSize allocationSize uint32_t memoryTypeIndex The value of 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 The value of pname:allocationSize must: be greater than `0` VkDeviceSize size VkDeviceSize alignment uint32_t memoryTypeBits VkMemoryPropertyFlags propertyFlags uint32_t heapIndex VkDeviceSize size VkMemoryHeapFlags flags VkImageAspectFlags aspectMask VkExtent3D imageGranularity VkSparseImageFormatFlags flags VkSparseImageFormatProperties formatProperties uint32_t imageMipTailFirstLod VkDeviceSize imageMipTailSize VkDeviceSize imageMipTailOffset VkDeviceSize imageMipTailStride uint32_t memoryTypeCount VkMemoryType memoryTypes[VK_MAX_MEMORY_TYPES] uint32_t memoryHeapCount VkMemoryHeap memoryHeaps[VK_MAX_MEMORY_HEAPS] VkStructureType sType const void* pNext VkDeviceMemory memory VkDeviceSize offset VkDeviceSize size pname:memory must: currently be mapped pname:offset must: be less than the size of the currently mapped range of pname:memory If pname:size is not equal to ename:VK_WHOLE_SIZE, the sum of pname:offset and pname:size must: be less than or equal to the size of the currently mapped range of pname:memory pname:offset and pname:size must: each be a multiple of sname:VkPhysicalDeviceLimits::pname:nonCoherentAtomSize VkFormatFeatureFlags linearTilingFeatures VkFormatFeatureFlags optimalTilingFeatures VkFormatFeatureFlags bufferFeatures VkExtent3D maxExtent uint32_t maxMipLevels uint32_t maxArrayLayers VkSampleCountFlags sampleCounts VkDeviceSize maxResourceSize VkBuffer buffer VkDeviceSize offset VkDeviceSize range If pname:range is not equal to ename:VK_WHOLE_SIZE, the sum of pname:offset and pname:range must: be less than or equal to the size of pname:buffer VkSampler sampler VkImageView imageView VkImageLayout imageLayout VkStructureType sType const void* pNext VkDescriptorSet dstSet uint32_t dstBinding uint32_t dstArrayElement uint32_t descriptorCount VkDescriptorType descriptorType const VkDescriptorImageInfo* pImageInfo const VkDescriptorBufferInfo* pBufferInfo const VkBufferView* pTexelBufferView pname:dstBinding must: be a valid binding point within pname:dstSet pname:descriptorType must: match the type of pname:dstBinding within pname:dstSet 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, 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 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, 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 ename:VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, and pname:dstSet was not created 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 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 ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, the pname:offset member of any given element of pname:pBufferInfo must: be a multiple of the value of sname:VkPhysicalDeviceLimits::pname:minUniformBufferOffsetAlignment 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 the value of sname:VkPhysicalDeviceLimits::pname:minStorageBufferOffsetAlignment 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 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 ename:VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, the pname:range member of any given element of pname:pBufferInfo must: be less than or equal to the value of sname:VkPhysicalDeviceLimits::pname:maxUniformBufferRange 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 must: be less than or equal to the value of sname:VkPhysicalDeviceLimits::pname:maxStorageBufferRange If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER, the sname:VkBuffer that pname:pTexelBufferView was created from must: have been created with ename:VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT set If pname:descriptorType is ename:VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER, the sname:VkBuffer that 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 ename:VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, the pname:imageView must: have been created with identity swizzle VkStructureType sType const void* pNext VkDescriptorSet srcSet uint32_t srcBinding uint32_t srcArrayElement VkDescriptorSet dstSet uint32_t dstBinding uint32_t dstArrayElement uint32_t descriptorCount pname:srcBinding must: be a valid binding within pname:srcSet 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 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>> VkStructureType sType const void* pNext VkBufferCreateFlags flags VkDeviceSize size VkBufferUsageFlags usage VkSharingMode sharingMode uint32_t queueFamilyIndexCount const uint32_t* pQueueFamilyIndices The value of pname:size must: be greater than `0` 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, pname:queueFamilyIndexCount must: be greater than `1` If the <<features-features-sparseBinding,sparse bindings>> feature is not enabled, pname:flags mustnot: contain ename:VK_BUFFER_CREATE_SPARSE_BINDING_BIT If the <<features-features-sparseResidencyBuffer,sparse buffer residency>> feature is not enabled, pname:flags mustnot: contain ename:VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT If the <<features-features-sparseResidencyAliased,sparse aliased residency>> feature is not enabled, pname:flags mustnot: contain ename:VK_BUFFER_CREATE_SPARSE_ALIASED_BIT If pname:flags contains ename:VK_BUFFER_CREATE_SPARSE_ALIASED_BIT, it must: also contain at least one of ename:VK_BUFFER_CREATE_SPARSE_BINDING_BIT or ename:VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT VkStructureType sType const void* pNext VkBufferViewCreateFlagsflags VkBuffer buffer VkFormat format VkDeviceSize offset VkDeviceSize range The value of pname:offset must: be a multiple of sname:VkPhysicalDeviceLimits::pname:minTexelBufferOffsetAlignment The value of pname:range must: be greater than `0` If pname:range is not equal to ename:VK_WHOLE_SIZE, the sum of pname:offset and pname:range must: be less than or equal to the size of pname:buffer If pname:range is not equal to ename:VK_WHOLE_SIZE, the value of pname:range must: be a multiple of the element size of pname:format The value of pname:range, divided by the size of an element of pname:format, must: be less than or equal to the value of sname:VkPhysicalDeviceLimits::pname:maxTexelBufferElements 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 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 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 VkImageAspectFlags aspectMask uint32_t mipLevel uint32_t arrayLayer 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 slink:VkImageCreateInfo when the image was created VkImageAspectFlags aspectMask uint32_t mipLevel uint32_t baseArrayLayer uint32_t layerCount If pname:aspectMask contains ename:VK_IMAGE_ASPECT_COLOR_BIT, it mustnot: contain either of ename:VK_IMAGE_ASPECT_DEPTH_BIT or ename:VK_IMAGE_ASPECT_STENCIL_BIT pname:aspectMask mustnot: contain ename:VK_IMAGE_ASPECT_METADATA_BIT pname:mipLevel must: be less than the pname:mipLevels specified in slink:VkImageCreateInfo when the image was created latexmath:[$(baseArrayLayer + layerCount)$] must: be less than or equal to the pname:arrayLayers specified in slink:VkImageCreateInfo when the image was created VkImageAspectFlags aspectMask uint32_t baseMipLevel uint32_t levelCount uint32_t baseArrayLayer uint32_t layerCount latexmath:[$(baseMipLevel + levelCount)$] must: be less than or equal to the pname:mipLevels specified in slink:VkImageCreateInfo when the image was created latexmath:[$(baseArrayLayer + layerCount)$] must: be less than or equal to the pname:arrayLayers specified in slink:VkImageCreateInfo when the image was created VkStructureType sType const void* pNext VkAccessFlags srcAccessMask VkAccessFlags dstAccessMask VkStructureType sType const void* pNext VkAccessFlags srcAccessMask VkAccessFlags dstAccessMask uint32_t srcQueueFamilyIndex uint32_t dstQueueFamilyIndex VkBuffer buffer VkDeviceSize offset VkDeviceSize size The value of pname:offset must: be less than the size of pname:buffer The sum of pname:offset and pname:size must: be less than or equal to than the size of pname:buffer If pname:buffer was created with a sharing mode of ename:VK_SHARING_MODE_CONCURRENT, pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex must: both be VK_QUEUE_FAMILY_IGNORED If pname:buffer was created with a sharing mode of ename:VK_SHARING_MODE_EXCLUSIVE, pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex must: either both be VK_QUEUE_FAMILY_IGNORED, or both be a valid queue family (see <<devsandqueues-queueprops>>) 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 barrier VkStructureType sType const void* pNext VkAccessFlags srcAccessMask VkAccessFlags dstAccessMask VkImageLayout oldLayout VkImageLayout newLayout uint32_t srcQueueFamilyIndex uint32_t dstQueueFamilyIndex VkImage image VkImageSubresourceRange subresourceRange pname:oldLayout must: be ename:VK_IMAGE_LAYOUT_UNDEFINED, ename:VK_IMAGE_LAYOUT_PREINITIALIZED or the current layout of the image region affected by the barrier pname:newLayout mustnot: be ename:VK_IMAGE_LAYOUT_UNDEFINED or ename:VK_IMAGE_LAYOUT_PREINITIALIZED If pname:image was created with a sharing mode of ename:VK_SHARING_MODE_CONCURRENT, pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex must: both be VK_QUEUE_FAMILY_IGNORED If pname:image was created with a sharing mode of ename:VK_SHARING_MODE_EXCLUSIVE, pname:srcQueueFamilyIndex and pname:dstQueueFamilyIndex must: either both be VK_QUEUE_FAMILY_IGNORED, or both be a valid queue family (see <<devsandqueues-queueprops>>) 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 subresource range for the image (see <<resources-image-views>>) 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 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 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 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 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 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 ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL then pname:image must: have been created with ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT set VkStructureType sType const void* pNext VkImageCreateFlags flags VkImageType imageType VkFormat format VkExtent3D extent uint32_t mipLevels uint32_t arrayLayers VkSampleCountFlagBits samples VkImageTiling tiling VkImageUsageFlags usage VkSharingMode sharingMode uint32_t queueFamilyIndexCount const uint32_t* pQueueFamilyIndices VkImageLayout initialLayout 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, pname:queueFamilyIndexCount must: be greater than `1` pname:format mustnot: be ename:VK_FORMAT_UNDEFINED The values of the pname:width, pname:height and pname:depth members of pname:extent must: all be greater than `0` The value of pname:mipLevels must: be greater than `0` The value of pname:arrayLayers must: be greater than `0` If pname:imageType is ename:VK_IMAGE_TYPE_1D, the value of pname:extent.width must: be less than or equal to the value of sname:VkPhysicalDeviceLimits::pname:maxImageDimension1D, or the value of sname:VkImageFormatProperties::pname:maxExtent.width (as returned by fname:vkGetPhysicalDeviceImageFormatProperties with values of 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 contain ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT, the value of pname:extent.width and pname:extent.height must: be less than or equal to the value of sname:VkPhysicalDeviceLimits::pname:maxImageDimension2D, or the value of sname:VkImageFormatProperties::pname:maxExtent.width/height (as returned by fname:vkGetPhysicalDeviceImageFormatProperties with values of 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 ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT, the value of pname:extent.width and pname:extent.height must: be less than or equal to the value of sname:VkPhysicalDeviceLimits::pname:maxImageDimensionCube, or the value of sname:VkImageFormatProperties::pname:maxExtent.width/height (as returned by fname:vkGetPhysicalDeviceImageFormatProperties with values of 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 ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT, the value of pname:extent.width and pname:extent.height must: be equal If pname:imageType is ename:VK_IMAGE_TYPE_3D, the value of pname:extent.width, pname:extent.height and pname:extent.depth must: be less than or equal to the value of sname:VkPhysicalDeviceLimits::pname:maxImageDimension3D, or the value of sname:VkImageFormatProperties::pname:maxExtent.width/height/depth (as returned by fname:vkGetPhysicalDeviceImageFormatProperties with values of pname:format, pname:type, pname:tiling, pname:usage and pname:flags equal to those in this structure) - whichever is higher The value of pname:mipLevels must: be less than or equal to or equal to the value of latexmath:[$\lfloor\log_2(\max(\mathit{extent.width}, \mathit{extent.height}, \mathit{extent.depth}))\rfloor + 1$] If the values of any of pname:extent.width, pname:extent.height or pname:extent.depth are greater than the values of the equivalently named members of sname:VkPhysicalDeviceLimits::pname:maxImageDimension3D, pname:mipLevels must: be less than or equal to the value of sname:VkImageFormatProperties::pname:maxMipLevels (as returned by fname:vkGetPhysicalDeviceImageFormatProperties with values of pname:format, pname:type, pname:tiling, pname:usage and pname:flags equal to those in this structure) The value of pname:arrayLayers must: be less than or equal to the value of sname:VkPhysicalDeviceLimits::pname:maxImageArrayLayers, or the value of sname:VkImageFormatProperties::pname:maxArrayLayers (as returned by fname:vkGetPhysicalDeviceImageFormatProperties with values of pname:format, pname:type, pname:tiling, pname:usage and pname:flags equal to those in this structure) - whichever is higher The value of pname:samples must: be a bit value that is set in the value of sname:VkPhysicalDeviceLimits::pname:sampleCounts returned by flink:vkGetPhysicalDeviceProperties, or the value of sname:VkImageFormatProperties::pname:maxExtent.sampleCounts returned by fname:vkGetPhysicalDeviceImageFormatProperties with values of pname:format, pname:type, pname:tiling, pname:usage and pname:flags equal to those in this structure 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, the value of 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, ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, ename:VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT or ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT, the value of pname:extent.height must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxFramebufferHeight If pname:usage includes ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT, the value of pname:samples must: be a bit value that is set in the value of sname:VkPhysicalDeviceLimits::pname:maxFramebufferColorSamples If pname:usage includes ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, and pname:format includes a depth aspect, the value of pname:samples must: be a bit value that is set in the value of sname:VkPhysicalDeviceLimits::pname:maxFramebufferDepthSamples If pname:usage includes ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, and pname:format includes a stencil aspect, the value of pname:samples must: be a bit value that is set in the value of sname:VkPhysicalDeviceLimits::pname:maxFramebufferStencilSamples If pname:usage includes ename:VK_IMAGE_USAGE_SAMPLED_BIT, and pname:format includes a color aspect, the value of pname:samples must: be a bit value that is set in the value of sname:VkPhysicalDeviceLimits::pname:maxSampledImageColorSamples If pname:usage includes ename:VK_IMAGE_USAGE_SAMPLED_BIT, and pname:format includes a depth aspect, the value of pname:samples must: be a bit value that is set in the value of sname:VkPhysicalDeviceLimits::pname:maxSampledImageDepthSamples If pname:usage includes ename:VK_IMAGE_USAGE_SAMPLED_BIT, and pname:format is an integer format, the value of pname:samples must: be a bit value that is set in the value of sname:VkPhysicalDeviceLimits::pname:maxSampledImageIntegerSamples If pname:usage includes ename:VK_IMAGE_USAGE_STORAGE_BIT, the value of pname:samples must: be a bit value that is set in the value of sname:VkPhysicalDeviceLimits::pname:maxStorageImageSamples If the <<features-features-textureCompressionETC2,ETC2 texture compression>> feature is not enabled, pname:format mustnot: be ename:VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK, ename:VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK, ename:VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK, ename:VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK, ename:VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK, ename:VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK, ename:VK_FORMAT_EAC_R11_UNORM_BLOCK, ename:VK_FORMAT_EAC_R11_SNORM_BLOCK, ename:VK_FORMAT_EAC_R11G11_UNORM_BLOCK, or ename:VK_FORMAT_EAC_R11G11_SNORM_BLOCK If the <<features-features-textureCompressionASTC_LDR,ASTC LDR texture compression>> feature is not enabled, pname:format mustnot: be ename:VK_FORMAT_ASTC_4x4_UNORM_BLOCK, ename:VK_FORMAT_ASTC_4x4_SRGB_BLOCK, ename:VK_FORMAT_ASTC_5x4_UNORM_BLOCK, ename:VK_FORMAT_ASTC_5x4_SRGB_BLOCK, ename:VK_FORMAT_ASTC_5x5_UNORM_BLOCK, ename:VK_FORMAT_ASTC_5x5_SRGB_BLOCK, ename:VK_FORMAT_ASTC_6x5_UNORM_BLOCK, ename:VK_FORMAT_ASTC_6x5_SRGB_BLOCK, ename:VK_FORMAT_ASTC_6x6_UNORM_BLOCK, ename:VK_FORMAT_ASTC_6x6_SRGB_BLOCK, ename:VK_FORMAT_ASTC_8x5_UNORM_BLOCK, ename:VK_FORMAT_ASTC_8x5_SRGB_BLOCK, ename:VK_FORMAT_ASTC_8x6_UNORM_BLOCK, ename:VK_FORMAT_ASTC_8x6_SRGB_BLOCK, ename:VK_FORMAT_ASTC_8x8_UNORM_BLOCK, ename:VK_FORMAT_ASTC_8x8_SRGB_BLOCK, ename:VK_FORMAT_ASTC_10x5_UNORM_BLOCK, ename:VK_FORMAT_ASTC_10x5_SRGB_BLOCK, ename:VK_FORMAT_ASTC_10x6_UNORM_BLOCK, ename:VK_FORMAT_ASTC_10x6_SRGB_BLOCK, ename:VK_FORMAT_ASTC_10x8_UNORM_BLOCK, ename:VK_FORMAT_ASTC_10x8_SRGB_BLOCK, ename:VK_FORMAT_ASTC_10x10_UNORM_BLOCK, ename:VK_FORMAT_ASTC_10x10_SRGB_BLOCK, ename:VK_FORMAT_ASTC_12x10_UNORM_BLOCK, ename:VK_FORMAT_ASTC_12x10_SRGB_BLOCK, ename:VK_FORMAT_ASTC_12x12_UNORM_BLOCK, or ename:VK_FORMAT_ASTC_12x12_SRGB_BLOCK If the <<features-features-textureCompressionBC,BC texture compression>> feature is not enabled, pname:format mustnot: be ename:VK_FORMAT_BC1_RGB_UNORM_BLOCK, ename:VK_FORMAT_BC1_RGB_SRGB_BLOCK, ename:VK_FORMAT_BC1_RGBA_UNORM_BLOCK, ename:VK_FORMAT_BC1_RGBA_SRGB_BLOCK, ename:VK_FORMAT_BC2_UNORM_BLOCK, ename:VK_FORMAT_BC2_SRGB_BLOCK, ename:VK_FORMAT_BC3_UNORM_BLOCK, ename:VK_FORMAT_BC3_SRGB_BLOCK, ename:VK_FORMAT_BC4_UNORM_BLOCK, ename:VK_FORMAT_BC4_SNORM_BLOCK, ename:VK_FORMAT_BC5_UNORM_BLOCK, ename:VK_FORMAT_BC5_SNORM_BLOCK, ename:VK_FORMAT_BC6H_UFLOAT_BLOCK, ename:VK_FORMAT_BC6H_SFLOAT_BLOCK, ename:VK_FORMAT_BC7_UNORM_BLOCK, or ename:VK_FORMAT_BC7_SRGB_BLOCK 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 not enabled, pname:flags mustnot: contain ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT If the <<features-features-sparseResidencyImage2D,sparse residency for 2D images>> feature is not enabled, and pname:imageType is VK_IMAGE_TYPE_2D, pname:flags mustnot: contain ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT If the <<features-features-sparseResidencyImage3D,sparse residency for 3D images>> feature is not enabled, and pname:imageType is VK_IMAGE_TYPE_3D, pname:flags mustnot: contain ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT If the <<features-features-sparseResidency2Samples,sparse residency for images with 2 samples>> feature is not enabled, pname:imageType is VK_IMAGE_TYPE_2D, and pname:samples is ename:VK_SAMPLE_COUNT_2_BIT, pname:flags mustnot: contain ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT If the <<features-features-sparseResidency4Samples,sparse residency for images with 4 samples>> feature is not enabled, pname:imageType is VK_IMAGE_TYPE_2D, and pname:samples is ename:VK_SAMPLE_COUNT_4_BIT, pname:flags mustnot: contain ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT If the <<features-features-sparseResidency8Samples,sparse residency for images with 8 samples>> feature is not enabled, pname:imageType is VK_IMAGE_TYPE_2D, and pname:samples is ename:VK_SAMPLE_COUNT_8_BIT, pname:flags mustnot: contain ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT If the <<features-features-sparseResidency16Samples,sparse residency for images with 16 samples>> feature is not enabled, pname:imageType is VK_IMAGE_TYPE_2D, and pname:samples is ename:VK_SAMPLE_COUNT_16_BIT, pname:flags mustnot: contain ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT If the value of pname:tiling is ename:VK_IMAGE_TILING_LINEAR, and the value of sname:VkFormatProperties::pname:linearTilingFeatures (as returned by fname:vkGetPhysicalDeviceFormatProperties with the same value of pname:format) does not include VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT, pname:usage mustnot: contain ename:VK_IMAGE_USAGE_SAMPLED_BIT If the value of pname:tiling is ename:VK_IMAGE_TILING_LINEAR, and the value of sname:VkFormatProperties::pname:linearTilingFeatures (as returned by fname:vkGetPhysicalDeviceFormatProperties with the same value of pname:format) does not include VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT, pname:usage mustnot: contain ename:VK_IMAGE_USAGE_STORAGE_BIT If the value of pname:tiling is ename:VK_IMAGE_TILING_LINEAR, and the value of sname:VkFormatProperties::pname:linearTilingFeatures (as returned by fname:vkGetPhysicalDeviceFormatProperties with the same value of pname:format) does not include VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT, pname:usage mustnot: contain ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT If the value of pname:tiling is ename:VK_IMAGE_TILING_LINEAR, and the value of sname:VkFormatProperties::pname:linearTilingFeatures (as returned by fname:vkGetPhysicalDeviceFormatProperties with the same value of pname:format) does not include VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT, pname:usage mustnot: contain ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT If the value of pname:tiling is ename:VK_IMAGE_TILING_OPTIMAL, and the value of sname:VkFormatProperties::pname:optimalTilingFeatures (as returned by fname:vkGetPhysicalDeviceFormatProperties with the same value of pname:format) does not include VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT, pname:usage mustnot: contain ename:VK_IMAGE_USAGE_SAMPLED_BIT If the value of pname:tiling is ename:VK_IMAGE_TILING_OPTIMAL, and the value of sname:VkFormatProperties::pname:optimalTilingFeatures (as returned by fname:vkGetPhysicalDeviceFormatProperties with the same value of pname:format) does not include VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT, pname:usage mustnot: contain ename:VK_IMAGE_USAGE_STORAGE_BIT If the value of pname:tiling is ename:VK_IMAGE_TILING_OPTIMAL, and the value of sname:VkFormatProperties::pname:optimalTilingFeatures (as returned by fname:vkGetPhysicalDeviceFormatProperties with the same value of pname:format) does not include VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT, pname:usage mustnot: contain ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT If the value of pname:tiling is ename:VK_IMAGE_TILING_OPTIMAL, and the value of sname:VkFormatProperties::pname:optimalTilingFeatures (as returned by fname:vkGetPhysicalDeviceFormatProperties with the same value of pname:format) does not include VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT, pname:usage mustnot: contain ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT If pname:flags contains ename:VK_IMAGE_CREATE_SPARSE_ALIASED_BIT, it must: also contain at least one of ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT or ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT VkDeviceSize offset VkDeviceSize size VkDeviceSize rowPitch VkDeviceSize arrayPitch VkDeviceSize depthPitch VkStructureType sType const void* pNext VkImageViewCreateFlags flags VkImage image VkImageViewType viewType VkFormat format VkComponentMapping components VkImageSubresourceRange subresourceRange If pname:image was not created with ename:VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT then pname:viewType mustnot: be ename:VK_IMAGE_VIEW_TYPE_CUBE or ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY If the <<features-features-imageCubeArray,image cubemap arrays>> feature is not enabled, pname:viewType mustnot: be ename:VK_IMAGE_VIEW_TYPE_CUBE_ARRAY If the <<features-features-textureCompressionETC2,ETC2 texture compression>> feature is not enabled, pname:format mustnot: be ename:VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK, ename:VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK, ename:VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK, ename:VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK, ename:VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK, ename:VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK, ename:VK_FORMAT_EAC_R11_UNORM_BLOCK, ename:VK_FORMAT_EAC_R11_SNORM_BLOCK, ename:VK_FORMAT_EAC_R11G11_UNORM_BLOCK, or ename:VK_FORMAT_EAC_R11G11_SNORM_BLOCK If the <<features-features-textureCompressionASTC_LDR,ASTC LDR texture compression>> feature is not enabled, pname:format mustnot: be ename:VK_FORMAT_ASTC_4x4_UNORM_BLOCK, ename:VK_FORMAT_ASTC_4x4_SRGB_BLOCK, ename:VK_FORMAT_ASTC_5x4_UNORM_BLOCK, ename:VK_FORMAT_ASTC_5x4_SRGB_BLOCK, ename:VK_FORMAT_ASTC_5x5_UNORM_BLOCK, ename:VK_FORMAT_ASTC_5x5_SRGB_BLOCK, ename:VK_FORMAT_ASTC_6x5_UNORM_BLOCK, ename:VK_FORMAT_ASTC_6x5_SRGB_BLOCK, ename:VK_FORMAT_ASTC_6x6_UNORM_BLOCK, ename:VK_FORMAT_ASTC_6x6_SRGB_BLOCK, ename:VK_FORMAT_ASTC_8x5_UNORM_BLOCK, ename:VK_FORMAT_ASTC_8x5_SRGB_BLOCK, ename:VK_FORMAT_ASTC_8x6_UNORM_BLOCK, ename:VK_FORMAT_ASTC_8x6_SRGB_BLOCK, ename:VK_FORMAT_ASTC_8x8_UNORM_BLOCK, ename:VK_FORMAT_ASTC_8x8_SRGB_BLOCK, ename:VK_FORMAT_ASTC_10x5_UNORM_BLOCK, ename:VK_FORMAT_ASTC_10x5_SRGB_BLOCK, ename:VK_FORMAT_ASTC_10x6_UNORM_BLOCK, ename:VK_FORMAT_ASTC_10x6_SRGB_BLOCK, ename:VK_FORMAT_ASTC_10x8_UNORM_BLOCK, ename:VK_FORMAT_ASTC_10x8_SRGB_BLOCK, ename:VK_FORMAT_ASTC_10x10_UNORM_BLOCK, ename:VK_FORMAT_ASTC_10x10_SRGB_BLOCK, ename:VK_FORMAT_ASTC_12x10_UNORM_BLOCK, ename:VK_FORMAT_ASTC_12x10_SRGB_BLOCK, ename:VK_FORMAT_ASTC_12x12_UNORM_BLOCK, or ename:VK_FORMAT_ASTC_12x12_SRGB_BLOCK If the <<features-features-textureCompressionBC,BC texture compression>> feature is not enabled, pname:format mustnot: be ename:VK_FORMAT_BC1_RGB_UNORM_BLOCK, ename:VK_FORMAT_BC1_RGB_SRGB_BLOCK, ename:VK_FORMAT_BC1_RGBA_UNORM_BLOCK, ename:VK_FORMAT_BC1_RGBA_SRGB_BLOCK, ename:VK_FORMAT_BC2_UNORM_BLOCK, ename:VK_FORMAT_BC2_SRGB_BLOCK, ename:VK_FORMAT_BC3_UNORM_BLOCK, ename:VK_FORMAT_BC3_SRGB_BLOCK, ename:VK_FORMAT_BC4_UNORM_BLOCK, ename:VK_FORMAT_BC4_SNORM_BLOCK, ename:VK_FORMAT_BC5_UNORM_BLOCK, ename:VK_FORMAT_BC5_SNORM_BLOCK, ename:VK_FORMAT_BC6H_UFLOAT_BLOCK, ename:VK_FORMAT_BC6H_SFLOAT_BLOCK, ename:VK_FORMAT_BC7_UNORM_BLOCK, or ename:VK_FORMAT_BC7_SRGB_BLOCK 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 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 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 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 ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT flag in sname:VkFormatProperties::pname:linearTilingFeatures returned by fname:vkGetPhysicalDeviceFormatProperties 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 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 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 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 ename:VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT flag in sname:VkFormatProperties::pname:optimalTilingFeatures returned by fname:vkGetPhysicalDeviceFormatProperties pname:subresourceRange must: be a valid subresource range for pname:image (see <<resources-image-views>>) 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 ename:VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT flag, pname:format must: be identical to the pname:format used to create pname:image pname:subResourceRange and pname:viewType must: be compatible with the image, as described in the <<resources-image-views-compatibility,table below>> VkDeviceSize srcOffset VkDeviceSize dstOffset VkDeviceSize size VkDeviceSize resourceOffset VkDeviceSize size VkDeviceMemory memory VkDeviceSize memoryOffset VkSparseMemoryBindFlagsflags If pname:memory is not sname: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 sname:VK_NULL_HANDLE, pname:memory mustnot: have been created with a memory type that reports ename:VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT bit set pname:resourceOffset must: be less than the size of the resource The sum of pname:resourceOffset and pname:size must: be less than or equal to the size of the resource pname:memoryOffset must: be less than the size of pname:memory The sum of pname:memoryOffset and pname:size must: be less than or equal to the size of pname:memory VkImageSubresource subresource VkOffset3D offset VkExtent3D extent VkDeviceMemory memory VkDeviceSize memoryOffset VkSparseMemoryBindFlagsflags 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 mustnot: overlap with those bound ranges 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 subresource for pname:image (see <<resources-image-views>>) pname:offset.x must: be a multiple of the block width (sname:VkSparseImageFormatProperties::pname:imageGranularity.width) of the image pname:extent.width must: either be a multiple of the 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 block height (sname:VkSparseImageFormatProperties::pname:imageGranularity.height) of the image pname:extent.height must: either be a multiple of the 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 block depth (sname:VkSparseImageFormatProperties::pname:imageGranularity.depth) of the image pname:extent.depth must: either be a multiple of the block depth of the image, or else pname:extent.depth + pname:offset.z must: equal the depth of the image subresource VkBuffer buffer uint32_t bindCount const VkSparseMemoryBind* pBinds VkImage image uint32_t bindCount const VkSparseMemoryBind* pBinds 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 VkImage image uint32_t bindCount const VkSparseImageMemoryBind* pBinds VkStructureType sType const void* pNext uint32_t waitSemaphoreCount const VkSemaphore* pWaitSemaphores uint32_t bufferBindCount const VkSparseBufferMemoryBindInfo* pBufferBinds uint32_t imageOpaqueBindCount const VkSparseImageOpaqueMemoryBindInfo* pImageOpaqueBinds uint32_t imageBindCount const VkSparseImageMemoryBindInfo* pImageBinds uint32_t signalSemaphoreCount const VkSemaphore* pSignalSemaphores VkImageSubresourceLayers srcSubresource VkOffset3D srcOffset VkImageSubresourceLayers dstSubresource VkOffset3D dstOffset VkExtent3D extent The pname:aspectMask member of pname:srcSubresource and pname:dstSubresource must: match The pname:layerCount member of pname:srcSubresource and pname:dstSubresource must: match 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 aspects present in the calling command's pname:srcImage 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: 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: both be greater than or equal to `0` and less than or equal to the source image subresource height 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 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: both be greater than or equal to `0` and less than or equal to the destination image subresource height 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:srcImage is a compressed format image: all members of pname:srcOffset must: be a multiple of the block size in the relevant dimensions pname:extent.width must: be a multiple of the 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 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 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 block size in the relevant dimensions pname:extent.width must: be a multiple of the 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 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 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 image transfer granularity requirements of the queue family that it will be submitted against, as described in <<execution-physical-device-enumeration,Physical Device Enumeration>> VkImageSubresourceLayers srcSubresource VkOffset3D srcOffsets[2] VkImageSubresourceLayers dstSubresource VkOffset3D dstOffsets[2] The pname:aspectMask member of pname:srcSubresource and pname:dstSubresource must: match The pname:layerCount member of pname:srcSubresource and pname:dstSubresource must: match 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 aspects present in the calling command's pname:srcImage The pname:aspectMask member of pname:dstSubresource must: specify aspects present in the calling command's pname:dstImage pname:srcOffset[0].x and pname:srcOffset[1].x must: both be greater than or equal to `0` and less than or equal to the source image subresource width pname:srcOffset[0].y and pname:srcOffset[1].y must: both be greater than or equal to `0` and less than or equal to the source image subresource height pname:srcOffset[0].z and pname:srcOffset[1].z must: both be greater than or equal to `0` and less than or equal to the source image subresource depth pname:dstOffset[0].x and pname:dstOffset[1].x must: both be greater than or equal to `0` and less than or equal to the destination image subresource width pname:dstOffset[0].y and pname:dstOffset[1].y must: both be greater than or equal to `0` and less than or equal to the destination image subresource height pname:dstOffset[0].z and pname:dstOffset[1].z must: both be greater than or equal to `0` and less than or equal to the destination image subresource depth VkDeviceSize bufferOffset uint32_t bufferRowLength uint32_t bufferImageHeight VkImageSubresourceLayers imageSubresource VkOffset3D imageOffset VkExtent3D imageExtent pname:bufferOffset must: be a multiple of the calling command's sname:VkImage parameter's texel size pname:bufferOffset must: be a multiple of `4` 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 pname:height member of pname:imageExtent 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: both be greater than or equal to `0` and less than or equal to the image subresource height 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 sname:VkImage parameter is a compressed format image: pname:bufferRowLength, pname:bufferImageHeight and all members of pname:imageOffset must: be a multiple of the block size in the relevant dimensions pname:bufferOffset must: be a multiple of the block size in bytes pname:imageExtent.width must: be a multiple of the block width or (pname:imageExtent.width + pname:imageOffset.x) must: equal the image subresource width pname:imageExtent.height must: be a multiple of the block height or (pname:imageExtent.height + pname:imageOffset.y) must: equal the image subresource height pname:imageExtent.depth must: be a multiple of the block depth or (pname:imageExtent.depth + pname:imageOffset.z) must: equal the image subresource depth 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 <<execution-physical-device-enumeration,Physical Device Enumeration>> The pname:aspectMask member of pname:srcSubresource must: specify aspects present in the calling command's sname:VkImage parameter The pname:aspectMask member of pname:pSubresource must: only have a single bit set 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 both pname:srcSubresource and pname:dstSubresource must: be `0` and `1`, respectively VkImageSubresourceLayers srcSubresource VkOffset3D srcOffset VkImageSubresourceLayers dstSubresource VkOffset3D dstOffset VkExtent3D extent 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 pname:dstSubresource must: match 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 VkStructureType sType const void* pNext VkShaderModuleCreateFlags flags size_t codeSize const uint32_t* pCode pname:codeSize must: be greater than 0 pname:codeSize must: be a multiple of 4 pname:pCode must: point to valid SPIR-V code, formatted and packed as described by https://www.khronos.org/registry/spir-v/specs/1.0/SPIRV.html[the SPIR-V Specification v1.0] 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 pname:pCode must: declare the code:Shader capability pname:pCode mustnot: 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 required by the implementation, the relevant feature must: be enabled, as listed in the <<spirvenv-capabilities-table,SPIR-V Environment>> appendix uint32_t binding VkDescriptorType descriptorType uint32_t descriptorCount VkShaderStageFlags stageFlags const VkSampler* pImmutableSamplers 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 combination of elink:VkShaderStageFlagBits values VkStructureType sType const void* pNext VkDescriptorSetLayoutCreateFlags flags uint32_t bindingCount const VkDescriptorSetLayoutBinding* pBindings VkDescriptorType type uint32_t descriptorCount The value of pname:descriptorCount must: be greater than `0` VkStructureType sType const void* pNext VkDescriptorPoolCreateFlags flags uint32_t maxSets uint32_t poolSizeCount const VkDescriptorPoolSize* pPoolSizes The value of pname:maxSets must: be greater than `0` VkStructureType sType const void* pNext VkDescriptorPool descriptorPool uint32_t descriptorSetCount const VkDescriptorSetLayout* pSetLayouts The value of pname:descriptorSetCount mustnot: be greater than the number of sets that are currently available for allocation in pname:descriptorPool uint32_t constantID uint32_t offset size_t size uint32_t mapEntryCount const VkSpecializationMapEntry* pMapEntries size_t dataSize const void* pData The pname:offset member of any given element of pname:pMapEntries must: be less than pname:dataSize The sum of the pname:offset and pname:size members of any given element of pname:pMapEntries must: be less than or equal to pname:dataSize VkStructureType sType const void* pNext VkPipelineShaderStageCreateFlags flags VkShaderStageFlagBits stage VkShaderModule module const char* pName const VkSpecializationInfo* pSpecializationInfo If the <<features-features-geometryShader,geometry shaders>> feature is not enabled, pname:stage mustnot: be pname:VK_SHADER_STAGE_GEOMETRY_BIT If the <<features-features-tessellationShader,tessellation shaders>> feature is not enabled, pname:stage mustnot: be pname:VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT or pname:VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT pname:stage mustnot: 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 with an execution model that matches pname:stage If the identified entry point includes any variable in its interface that is declared with the code:ClipDistance code:BuiltIn decoration, that variable mustnot: have an array size greater than sname:VkPhysicalDeviceLimits::pname:maxClipDistances If the identified entry point includes any variable in its interface that is declared with the code:CullDistance code:BuiltIn decoration, that variable mustnot: have an array size greater than sname:VkPhysicalDeviceLimits::pname:maxCullDistances 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 mustnot: have array sizes which sum to more than sname:VkPhysicalDeviceLimits::pname:maxCombinedClipAndCullDistances If the identified entry point includes any variable in its interface that is declared with the code:SampleMask code:BuiltIn decoration, that variable mustnot: have an array size greater than sname:VkPhysicalDeviceLimits::pname:maxSampleMaskWords If pname:stage is ename:VK_SHADER_STAGE_VERTEX_BIT, the identified entry point mustnot: 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 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 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 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 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 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 entry point mustnot: include any output variables in its interface decorated with code:CullDistance 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 VkStructureType sType const void* pNext VkPipelineCreateFlags flags VkPipelineShaderStageCreateInfo stage VkPipelineLayout layout VkPipeline basePipelineHandle int32_t basePipelineIndex If pname:flags contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, and pname:basePipelineIndex is not `-1`, pname:basePipelineHandle must: be sname:VK_NULL_HANDLE If pname:flags contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, and pname:basePipelineIndex is not `-1`, it must: be a valid index into the calling command's pname:pCreateInfos parameter If pname:flags contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, and pname:basePipelineHandle is not sname:VK_NULL_HANDLE, pname:basePipelineIndex must: be `-1` If pname:flags contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, and pname:basePipelineHandle is not sname:VK_NULL_HANDLE, pname:basePipelineHandle must: be a valid sname:VkPipeline handle If pname:flags contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, and pname:basePipelineHandle is not sname:VK_NULL_HANDLE, it must: be a valid handle to a compute sname:VkPipeline 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 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 <<descriptorsets-pipelinelayout-consistency,consistent>> with all shaders specified in pname:pStages uint32_t binding uint32_t stride VkVertexInputRate inputRate pname:binding must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxVertexInputBindings pname:stride must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxVertexInputBindingStride uint32_t location uint32_t binding VkFormat format uint32_t offset pname:binding must: be less than sname:VkPhysicalDeviceLimits::pname:maxVertexInputBindings 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 the ename:VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT flag in sname:VkFormatProperties::pname:bufferFeatures returned by fname:vkGetPhysicalDeviceFormatProperties VkStructureType sType const void* pNext VkPipelineVertexInputStateCreateFlags flags uint32_t vertexBindingDescriptionCount const VkVertexInputBindingDescription* pVertexBindingDescriptions uint32_t vertexAttributeDescriptionCount const VkVertexInputAttributeDescription* pVertexAttributeDescriptions pname:vertexBindingDescriptionCount must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxVertexInputBindings pname:vertexAttributeDescriptionCount must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxVertexInputAttributes For every value of 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 binding numbers All elements of pname:pVertexAttributeDescriptions must: describe distinct attribute locations VkStructureType sType const void* pNext VkPipelineInputAssemblyStateCreateFlags flags VkPrimitiveTopology topology VkBool32 primitiveRestartEnable 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, the value of pname:primitiveRestartEnable must: be ename:VK_FALSE If the <<features-features-geometryShader,geometry shaders>> feature is not enabled, pname:topology mustnot: 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>> feature is not enabled, pname:topology mustnot: be VK_PRIMITIVE_TOPOLOGY_PATCH_LIST VkStructureType sType const void* pNext VkPipelineTessellationStateCreateFlags flags uint32_t patchControlPoints pname:patchControlPoints must: be greater than zero and less than or equal to sname:VkPhysicalDeviceLimits::pname:maxTessellationPatchSize VkStructureType sType const void* pNext VkPipelineViewportStateCreateFlags flags uint32_t viewportCount const VkViewport* pViewports uint32_t scissorCount const VkRect2D* pScissors 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 not enabled, pname:scissorCount must: be `1` pname:viewportCount must: be between `1` and sname:VkPhysicalDeviceLimits::pname:maxViewports, inclusive pname:scissorCount must: be between `1` and sname:VkPhysicalDeviceLimits::pname:maxViewports, inclusive The values of pname:scissorCount and pname:viewportCount must: be identical VkStructureType sType const void* pNext VkPipelineRasterizationStateCreateFlags flags VkBool32 depthClampEnable VkBool32 rasterizerDiscardEnable VkPolygonMode polygonMode VkCullModeFlags cullMode VkFrontFace frontFace VkBool32 depthBiasEnable float depthBiasConstantFactor float depthBiasClamp float depthBiasSlopeFactor float lineWidth If the <<features-features-depthClamp,depth clamping>> feature is not enabled, the value of pname:depthClampEnable must: be ename:VK_FALSE If the <<features-features-fillModeNonSolid,non-solid fill modes>> feature is not enabled, the value of pname:fillMode must: be ename:VK_POLYGON_MODE_FILL VkStructureType sType const void* pNext VkPipelineMultisampleStateCreateFlags flags VkSampleCountFlagBits rasterizationSamples VkBool32 sampleShadingEnable float minSampleShading const VkSampleMask* pSampleMask VkBool32 alphaToCoverageEnable VkBool32 alphaToOneEnable 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 enabled, pname:alphaToOneEnable must: be ename:VK_FALSE VkBool32 blendEnable VkBlendFactor srcColorBlendFactor VkBlendFactor dstColorBlendFactor VkBlendOp colorBlendOp VkBlendFactor srcAlphaBlendFactor VkBlendFactor dstAlphaBlendFactor VkBlendOp alphaBlendOp VkColorComponentFlags colorWriteMask If the <<features-features-dualSrcBlend,dual source blending>> feature is not enabled, pname:srcColorBlendFactor mustnot: be pname:VK_BLEND_SRC1_COLOR, pname:VK_BLEND_ONE_MINUS_SRC1_COLOR, pname:VK_BLEND_SRC1_ALPHA, or pname:VK_BLEND_ONE_MINUS_SRC1_ALPHA If the <<features-features-dualSrcBlend,dual source blending>> feature is not enabled, pname:dstColorBlendFactor mustnot: be pname:VK_BLEND_SRC1_COLOR, pname:VK_BLEND_ONE_MINUS_SRC1_COLOR, pname:VK_BLEND_SRC1_ALPHA, or pname:VK_BLEND_ONE_MINUS_SRC1_ALPHA If the <<features-features-dualSrcBlend,dual source blending>> feature is not enabled, pname:srcAlphaBlendFactor mustnot: be pname:VK_BLEND_SRC1_COLOR, pname:VK_BLEND_ONE_MINUS_SRC1_COLOR, pname:VK_BLEND_SRC1_ALPHA, or pname:VK_BLEND_ONE_MINUS_SRC1_ALPHA If the <<features-features-dualSrcBlend,dual source blending>> feature is not enabled, pname:dstAlphaBlendFactor mustnot: be pname:VK_BLEND_SRC1_COLOR, pname:VK_BLEND_ONE_MINUS_SRC1_COLOR, pname:VK_BLEND_SRC1_ALPHA, or pname:VK_BLEND_ONE_MINUS_SRC1_ALPHA VkStructureType sType const void* pNext VkPipelineColorBlendStateCreateFlags flags VkBool32 logicOpEnable VkLogicOp logicOp uint32_t attachmentCount const VkPipelineColorBlendAttachmentState* pAttachments float blendConstants[4] 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 enabled, pname:logicOpEnable must: be ename:VK_FALSE If pname:logicOpEnable is ename:VK_TRUE, pname:logicOp must: be a valid elink:VkLogicOp value VkStructureType sType const void* pNext VkPipelineDynamicStateCreateFlags flags uint32_t dynamicStateCount const VkDynamicState* pDynamicStates VkStencilOp failOp VkStencilOp passOp VkStencilOp depthFailOp VkCompareOp compareOp uint32_t compareMask uint32_t writeMask uint32_t reference VkStructureType sType const void* pNext VkPipelineDepthStencilStateCreateFlags flags VkBool32 depthTestEnable VkBool32 depthWriteEnable VkCompareOp depthCompareOp VkBool32 depthBoundsTestEnable VkBool32 stencilTestEnable VkStencilOpState front VkStencilOpState back float minDepthBounds float maxDepthBounds If the <<features-features-depthBounds,depth bounds testing>> feature is not enabled, the value of pname:depthBoundsTestEnable must: be ename:VK_FALSE VkStructureType sType const void* pNext VkPipelineCreateFlags flags uint32_t stageCount const VkPipelineShaderStageCreateInfo* pStages const VkPipelineVertexInputStateCreateInfo* pVertexInputState const VkPipelineInputAssemblyStateCreateInfo* pInputAssemblyState const VkPipelineTessellationStateCreateInfo* pTessellationState const VkPipelineViewportStateCreateInfo* pViewportState const VkPipelineRasterizationStateCreateInfo* pRasterizationState const VkPipelineMultisampleStateCreateInfo* pMultisampleState const VkPipelineDepthStencilStateCreateInfo* pDepthStencilState const VkPipelineColorBlendStateCreateInfo* pColorBlendState const VkPipelineDynamicStateCreateInfo* pDynamicState VkPipelineLayout layout VkRenderPass renderPass uint32_t subpass VkPipeline basePipelineHandle int32_t basePipelineIndex If pname:flags contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, and pname:basePipelineIndex is not `-1`, pname:basePipelineHandle must: be sname:VK_NULL_HANDLE If pname:flags contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, and pname:basePipelineIndex is not `-1`, it must: be a valid index into the calling command's pname:pCreateInfos parameter If pname:flags contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, and pname:basePipelineHandle is not sname:VK_NULL_HANDLE, pname:basePipelineIndex must: be `-1` If pname:flags contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, and pname:basePipelineHandle is not sname:VK_NULL_HANDLE, pname:basePipelineHandle must: be a valid sname:VkPipeline handle If pname:flags contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT flag, and pname:basePipelineHandle is not sname:VK_NULL_HANDLE, it must: be a valid handle to a graphics sname:VkPipeline pname:stageCount must: be greater than or equal to `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 ename:VK_SHADER_STAGE_VERTEX_BIT The pname:stage member of any given element of pname:pStages mustnot: be ename:VK_SHADER_STAGE_COMPUTE_BIT 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 must: include a tessellation control shader stage If pname:pStages includes a tessellation control shader stage and a tessellation evaluation shader stage, pname:pTessellationState mustnot: be `NULL` If pname:pStages includes both a tessellation control shader stage and a tessellation evaluation shader stage, the shader code of at least one must: contain an code:OpExecutionMode instruction that specifies the type of subdivision in the pipeline If pname:pStages includes both a tessellation control shader stage and a tessellation evaluation shader stage, and the shader code of both 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 both a tessellation control shader stage and a tessellation evaluation shader stage, the shader code of at least one must: contain an code:OpExecutionMode instruction that specifies the output patch size in the pipeline If pname:pStages includes both a tessellation control shader stage and a tessellation evaluation shader stage, 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 member of pname:pInputAssembly must: be ename:VK_PRIMITIVE_TOPOLOGY_PATCH_LIST If pname:pStages includes a geometry shader stage, and doesn't 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 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 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 mustnot: 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 the rest of the state identified by this structure must: adhere to the pipeline linking rules described in the <<interfaces,Shader Interfaces>> chapter If 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, and pname:pDepthStencilState is not `NULL`, the pname:depthWriteEnable member of pname:pDepthStencilState must: be ename:VK_FALSE If 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, and pname:pDepthStencilState is not `NULL`, the value of 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 pname:pColorBlendState is not `NULL`, the value of the pname:blendEnable member of each element of the pname:pAttachment member of pname:pColorBlendState must: be ename:VK_FALSE if the pname:format of the attachment referred to in pname:subpass of pname:renderPass does not support color blend operations, as specified by the ename:VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT flag in sname:VkFormatProperties::pname:linearTilingFeatures or sname:VkFormatProperties::pname:optimalTilingFeatures returned by fname:vkGetPhysicalDeviceFormatProperties If pname:pColorBlendState is not `NULL`, The pname:attachmentCount member of pname:pColorBlendState must: be equal to the value of pname:colorAttachmentCount used to create pname:subpass 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->viewportCount sname:VkViewport structures 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->scissorCount sname:VkRect2D structures 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 is ename:VK_FALSE, pname:pViewportState must: be a pointer to a valid sname:VkPipelineViewportStateCreateInfo structure 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 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 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 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 is ename:VK_DYNAMIC_STATE_DEPTH_BOUNDS, and the pname:depthBoundsTestEnable member of pname:pDepthStencil is ename:VK_TRUE, the value of the pname:minDepthBounds and pname:maxDepthBounds members of pname:pDepthStencil must: be between `0.0` and `1.0`, inclusive 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 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 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 VkStructureType sType const void* pNext VkPipelineCacheCreateFlags flags size_t initialDataSize const void* pInitialData 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 retrieved from a previous call to fname:vkGetPipelineCacheData VkShaderStageFlags stageFlags uint32_t offset uint32_t size The sum of pname:offset and pname:size must: be less than or equal to the value of sname:VkPhysicalDeviceLimits::pname:maxPushConstantsSize The value of pname:size must: be greater than `0` The value of pname:size must: be a multiple of `4` VkStructureType sType const void* pNext VkPipelineLayoutCreateFlags flags uint32_t setLayoutCount const VkDescriptorSetLayout* pSetLayouts uint32_t pushConstantRangeCount const VkPushConstantRange* pPushConstantRanges pname:setLayoutCount must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxBoundDescriptorSets 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 the value of sname:VkPhysicalDeviceLimits::pname:maxPerStageDescriptorSamplers 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 the value of sname:VkPhysicalDeviceLimits::pname:maxPerStageDescriptorUniformBuffers 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 the value of sname:VkPhysicalDeviceLimits::pname:maxPerStageDescriptorStorageBuffers 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 the value of sname:VkPhysicalDeviceLimits::pname:maxPerStageDescriptorSampledImages 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 the value of sname:VkPhysicalDeviceLimits::pname:maxPerStageDescriptorStorageImages VkStructureType sType const void* pNext VkSamplerCreateFlags flags VkFilter magFilter VkFilter minFilter VkSamplerMipmapMode mipmapMode VkSamplerAddressMode addressModeU VkSamplerAddressMode addressModeV VkSamplerAddressMode addressModeW float mipLodBias VkBool32 anisotropyEnable float maxAnisotropy VkBool32 compareEnable VkCompareOp compareOp float minLod float maxLod VkBorderColor borderColor VkBool32 unnormalizedCoordinates The absolute value of pname:mipLodBias must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxSamplerLodBias 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, the value of pname:maxAnisotropy must: be between `1.0` and sname:VkPhysicalDeviceLimits::pname:maxSamplerAnisotropy, inclusive If pname:unnormalizedCoordinates is ename:VK_TRUE, pname:minFilter and pname:magFilter must: be equal 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 pname:maxLod must: be zero 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, pname:anisotropyEnable must: be ename:VK_FALSE If pname:unnormalizedCoordinates is ename:VK_TRUE, pname:compareEnable must: be ename:VK_FALSE 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 pname:compareEnable is ename:VK_TRUE, pname:compareOp must: be a valid elink:VkCompareOp value VkStructureType sType const void* pNext VkCommandPoolCreateFlags flags uint32_t queueFamilyIndex pname:queueFamilyIndex must: be the index of a queue family available in the calling command's pname:device parameter VkStructureType sType const void* pNext VkCommandPool commandPool VkCommandBufferLevel level uint32_t commandBufferCount VkStructureType sType const void* pNext VkRenderPass renderPass uint32_t subpass VkFramebuffer framebuffer VkBool32 occlusionQueryEnable VkQueryControlFlags queryFlags VkQueryPipelineStatisticFlags pipelineStatistics 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 is enabled, pname:queryFlags must: be a valid combination of elink:VkQueryControlFlagBits values If the <<features-features-pipelineStatisticsQuery,pipeline statistics queries>> feature is not enabled, pname:pipelineStatistics must: be code:0 VkStructureType sType const void* pNext VkCommandBufferUsageFlags flags const VkCommandBufferInheritanceInfo* pInheritanceInfo 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 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 ename:VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT, the pname:framebuffer member of pname:pInheritanceInfo must: be either sname:VK_NULL_HANDLE, or a valid sname:VkFramebuffer that is compatible with the pname:renderPass member of pname:pInheritanceInfo float float32[4] int32_t int32[4] uint32_t uint32[4] float depth uint32_t stencil VkClearColorValue color VkClearDepthStencilValue depthStencil VkStructureType sType const void* pNext VkRenderPass renderPass VkFramebuffer framebuffer VkRect2D renderArea uint32_t clearValueCount const VkClearValue* pClearValues The value of pname:clearValueCount must: be greater than or equal to the number of attachments in pname:renderPass that specify a pname:loadOp of ename:VK_ATTACHMENT_LOAD_OP_CLEAR VkImageAspectFlags aspectMask uint32_t colorAttachment VkClearValue clearValue If pname:aspectMask includes ename:VK_IMAGE_ASPECT_COLOR_BIT, it mustnot: include ename:VK_IMAGE_ASPECT_DEPTH_BIT or ename:VK_IMAGE_ASPECT_STENCIL_BIT pname:aspectMask mustnot: include ename:VK_IMAGE_ASPECT_METADATA_BIT VkAttachmentDescriptionFlags flags VkFormat format VkSampleCountFlagBits samples VkAttachmentLoadOp loadOp VkAttachmentStoreOp storeOp VkAttachmentLoadOp stencilLoadOp VkAttachmentStoreOp stencilStoreOp VkImageLayout initialLayout VkImageLayout finalLayout uint32_t attachment VkImageLayout layout VkSubpassDescriptionFlags flags VkPipelineBindPoint pipelineBindPoint uint32_t inputAttachmentCount const VkAttachmentReference* pInputAttachments uint32_t colorAttachmentCount const VkAttachmentReference* pColorAttachments const VkAttachmentReference* pResolveAttachments const VkAttachmentReference* pDepthStencilAttachment uint32_t preserveAttachmentCount const uint32_t* pPreserveAttachments pname:pipelineBindPoint must: be ename:VK_PIPELINE_BIND_POINT_GRAPHICS The value of pname:colorCount 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 attachment, and the attachment is not also used as a color or depth/stencil attachment in the same subpass, then pname:loadOp mustnot: be ename:VK_ATTACHMENT_LOAD_OP_CLEAR If pname:pResolveAttachments is not `NULL`, for each resolve attachment that does not have the value ename:VK_ATTACHMENT_UNUSED, the corresponding color attachment mustnot: have the value ename:VK_ATTACHMENT_UNUSED 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 of ename:VK_SAMPLE_COUNT_1_BIT Any given element of pname:pResolveAttachments must: have the same elink:VkFormat as its corresponding color attachment 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 pipelines bound during the subpass mustnot: accesss those input attachments from the fragment shader The pname:attachment member of any element of pname:pPreserveAttachments mustnot: be ename:VK_ATTACHMENT_UNUSED Any given element of pname:pPreserveAttachments mustnot: 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 depth/stencil attachment, then each use must use the same pname:layout uint32_t srcSubpass uint32_t dstSubpass VkPipelineStageFlags srcStageMask VkPipelineStageFlags dstStageMask VkAccessFlags srcAccessMask VkAccessFlags dstAccessMask VkDependencyFlags dependencyFlags If the <<features-features-geometryShader,geometry shaders>> feature is not enabled, pname:srcStageMask mustnot: contain pname:VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT If the <<features-features-geometryShader,geometry shaders>> feature is not enabled, pname:dstStageMask mustnot: contain pname:VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT If the <<features-features-tessellationShader,tessellation shaders>> feature is not enabled, pname:srcStageMask mustnot: contain pname:VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT or pname:VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT If the <<features-features-tessellationShader,tessellation shaders>> feature is not enabled, pname:dstStageMask mustnot: contain pname:VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT or pname:VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT The value of 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 The values of pname:srcSubpass and pname:dstSubpass mustnot: both be equal to ename:VK_SUBPASS_EXTERNAL VkStructureType sType const void* pNext VkRenderPassCreateFlags flags uint32_t attachmentCount const VkAttachmentDescription* pAttachments uint32_t subpassCount const VkSubpassDescription* pSubpasses uint32_t dependencyCount const VkSubpassDependency* pDependencies 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 pname:pInputAttachments, pname:pColorAttachments, pname:pResolveAttachments or pname:pDepthStencilAttachment, or the attachment indexed by any element of pname:pPreserveAttachments in any given element of pname:pSubpasses is bound to a range of a sname:VkDeviceMemory object that overlaps with any other attachment in 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 pname:pInputAttachments, pname:pColorAttachments, pname:pResolveAttachments or pname:pDepthStencilAttachment, or the value of any element of pname:pPreserveAttachments in any given element of pname:pSubpasses is not ename:VK_ATTACHMENT_UNUSED, it must: be less than the value of pname:attachmentCount The value of any element of the pname:pPreserveAttachments member in any given element of pname:pSubpasses mustnot: be ename:VK_ATTACHMENT_UNUSED VkStructureType sType const void* pNext VkEventCreateFlags flags VkStructureType sType const void* pNext VkFenceCreateFlags flags VkStructureType sType const void* pNext VkSemaphoreCreateFlags flags VkStructureType sType const void* pNext VkQueryPoolCreateFlags flags VkQueryType queryType uint32_t queryCount VkQueryPipelineStatisticFlags pipelineStatistics If the <<features-features-pipelineStatisticsQuery,pipeline statistics queries>> feature is not enabled, pname:queryType mustnot: be ename:VK_QUERY_TYPE_PIPELINE_STATISTICS If pname:queryType is ename:VK_QUERY_TYPE_PIPELINE_STATISTICS, pname:pipelineStatistics must: be a valid combination of elink:VkQueryPipelineStatisticFlagBits values VkStructureType sType const void* pNext VkFramebufferCreateFlags flags VkRenderPass renderPass uint32_t attachmentCount const VkImageView* pAttachments uint32_t width uint32_t height uint32_t layers The value of 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 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 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 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 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 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 as large as the corresponding framebuffer dimension Any given element of pname:pAttachments must: only specify a single mip-level Any given element of pname:pAttachments must: have been created with identity swizzle The value of pname:width must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxFramebufferWidth The value of pname:height must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxFramebufferHeight The value of pname:layers must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxFramebufferLayers uint32_t vertexCount uint32_t instanceCount uint32_t firstVertex uint32_t firstInstance 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 <<features-features-drawIndirectFirstInstance,drawIndirectFirstInstance>> feature is not enabled, pname:firstInstance must: be code:0 uint32_t indexCount uint32_t instanceCount uint32_t firstIndex int32_t vertexOffset uint32_t firstInstance 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>> The total value of (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 If the <<features-features-drawIndirectFirstInstance,drawIndirectFirstInstance>> feature is not enabled, pname:firstInstance must: be code:0 uint32_t x uint32_t y uint32_t z pname:x must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[0] pname:y must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[1] pname:z must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[2] VkStructureType sType const void* pNext uint32_t waitSemaphoreCount const VkSemaphore* pWaitSemaphores const VkPipelineStageFlags* pWaitDstStageMask uint32_t commandBufferCount const VkCommandBuffer* pCommandBuffers uint32_t signalSemaphoreCount const VkSemaphore* pSignalSemaphores Any given element of pname:pSignalSemaphores must: currently be unsignalled Any given element of pname:pCommandBuffers must: either have been recorded with the VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT, or not currently be executing on the device Any given element of pname:pCommandBuffers must: be in the executable state If any given element of pname:pCommandBuffers contains commands that execute secondary command buffers, those secondary command buffers must: have been recorded with the ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT, or not currently be executing on the device If any given element of pname:pCommandBuffers was created with ename:VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT, it mustnot: have been previously submitted without re-recording that command buffer Any given element of pname:pCommandBuffers mustnot: contain commands that execute a secondary command buffer, if that secondary command buffer has been recorded in another primary command buffer after it was recorded into this sname:VkCommandBuffer Any given element of pname:pCommandBuffers must: have been created on a sname:VkCommandPool that was created for the same queue family that the calling command's pname:queue belongs to Any given element of pname:pCommandBuffers mustnot: have been created with ename:VK_COMMAND_BUFFER_LEVEL_SECONDARY Any given element of sname:VkSemaphore in pname:pWaitSemaphores must: refer to a prior signal of that sname:VkSemaphore that won't be consumed by any other wait on that semaphore If the <<features-features-geometryShader,geometry shaders>> feature is not enabled, any given element of pname:pWaitDstStageMask mustnot: contain pname:VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT If the <<features-features-tessellationShader,tessellation shaders>> feature is not enabled, any given element of pname:pWaitDstStageMask mustnot: contain pname:VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT or pname:VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT VkDisplayKHR display const char* displayName VkExtent2D physicalDimensions VkExtent2D physicalResolution VkSurfaceTransformFlagsKHR supportedTransforms VkBool32 planeReorderPossible VkBool32 persistentContent VkDisplayKHR currentDisplay uint32_t currentStackIndex VkExtent2D visibleRegion uint32_t refreshRate VkDisplayModeKHR displayMode VkDisplayModeParametersKHR parameters VkStructureType sType const void* pNext VkDisplayModeCreateFlagsKHR flags VkDisplayModeParametersKHR parameters 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 `0` VkDisplayPlaneAlphaFlagsKHR supportedAlpha VkOffset2D minSrcPosition VkOffset2D maxSrcPosition VkExtent2D minSrcExtent VkExtent2D maxSrcExtent VkOffset2D minDstPosition VkOffset2D maxDstPosition VkExtent2D minDstExtent VkExtent2D maxDstExtent VkStructureType sType const void* pNext VkDisplaySurfaceCreateFlagsKHR flags VkDisplayModeKHR displayMode uint32_t planeIndex uint32_t planeStackIndex VkSurfaceTransformFlagBitsKHR transform float globalAlpha VkDisplayPlaneAlphaFlagBitsKHR alphaMode VkExtent2D imageExtent 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 sname:VkDisplayPropertiesKHR structure returned by fname:vkGetPhysicalDeviceDisplayPropertiesKHR for the display corresponding to pname:displayMode is ename:VK_TRUE then pname:planeStackIndex must: be less than the number of display planes supported by the device as determined by calling fname:vkGetPhysicalDeviceDisplayPlanePropertiesKHR; otherwise pname:planeStackIndex must: equal the pname:currentStackIndex member of 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 pname:globalAlpha must: be between `0` and `1`, inclusive 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 less than the pname:maxImageDimensions2D member of sname:VkPhysicalDeviceLimits VkStructureType sType const void* pNext VkRect2D srcRect VkRect2D dstRect VkBool32 persistent 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 pname:visibleRegion parameter of the display mode the swapchain being presented uses 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 uint32_t minImageCount uint32_t maxImageCount VkExtent2D currentExtent VkExtent2D minImageExtent VkExtent2D maxImageExtent uint32_t maxImageArrayLayers VkSurfaceTransformFlagsKHR supportedTransforms VkSurfaceTransformFlagBitsKHR currentTransform VkCompositeAlphaFlagsKHR supportedCompositeAlpha VkImageUsageFlags supportedUsageFlags VkStructureType sType const void* pNext VkAndroidSurfaceCreateFlagsKHR flags ANativeWindow* window pname:window mustnot: be in a connected state VkStructureType sType const void* pNext VkMirSurfaceCreateFlagsKHR flags MirConnection* connection MirSurface* mirSurface VkStructureType sType const void* pNext VkWaylandSurfaceCreateFlagsKHR flags struct wl_display* display struct wl_surface* surface VkStructureType sType const void* pNext VkWin32SurfaceCreateFlagsKHR flags HINSTANCE hinstance HWND hwnd VkStructureType sType const void* pNext VkXlibSurfaceCreateFlagsKHR flags Display* dpy Window window VkStructureType sType const void* pNext VkXcbSurfaceCreateFlagsKHR flags xcb_connection_t* connection xcb_window_t window VkFormat format VkColorSpaceKHR colorSpace VkStructureType sType const void* pNext VkSwapchainCreateFlagsKHR flags VkSurfaceKHR surface uint32_t minImageCount VkFormat imageFormat VkColorSpaceKHR imageColorSpace VkExtent2D imageExtent uint32_t imageArrayLayers VkImageUsageFlags imageUsage VkSharingMode imageSharingMode uint32_t queueFamilyIndexCount const uint32_t* pQueueFamilyIndices VkSurfaceTransformFlagBitsKHR preTransform VkCompositeAlphaFlagBitsKHR compositeAlpha VkPresentModeKHR presentMode VkBool32 clipped VkSwapchainKHR oldSwapchain pname:surface must: be a surface that is supported by the device as determined using fname:vkGetPhysicalDeviceSurfaceSupportKHR The native window referred to by pname:surface mustnot: already be associated with a swapchain other than pname:oldSwapchain, or with a non-{apiname} graphics API surface 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 the pname:maxImageCount member of the sname:VkSurfaceCapabilitiesKHR structure returned by fname:vkGetPhysicalDeviceSurfaceCapabilitiesKHR for the surface if the returned value of pname:maxImageCount is not zero 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 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 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 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, 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, pname:queueFamilyIndexCount must: be greater than `1` 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 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 returned by fname:vkGetPhysicalDeviceSurfacePresentModesKHR for the surface VkStructureType sType const void* pNext uint32_t waitSemaphoreCount const VkSemaphore* pWaitSemaphores uint32_t swapchainCount const VkSwapchainKHR* pSwapchains const uint32_t* pImageIndices VkResult* pResults 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 that is owned by the application Any given element of sname:VkSemaphore in pname:pWaitSemaphores must: refer to a prior signal of that sname:VkSemaphore that won't be consumed by any other wait on that semaphore VkStructureType sType const void* pNext VkDebugReportFlagsEXT flags PFN_vkDebugReportCallbackEXT pfnCallback void* pUserData VkResult vkCreateInstance const VkInstanceCreateInfo* pCreateInfo const VkAllocationCallbacks* pAllocator VkInstance* pInstance void vkDestroyInstance VkInstance instance const VkAllocationCallbacks* pAllocator 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 created, a compatible set of callbacks must: be provided here If no sname:VkAllocationCallbacks were provided when pname:instance was created, pname:pAllocator must: be `NULL` VkResult vkEnumeratePhysicalDevices VkInstance instance uint32_t* pPhysicalDeviceCount VkPhysicalDevice* pPhysicalDevices PFN_vkVoidFunction vkGetDeviceProcAddr VkDevice device const char* pName pname:pName must: be the name of a supported command that has a first parameter of type sname:VkDevice, sname:VkQueue or sname:VkCommandBuffer, either in the core API or an enabled extension PFN_vkVoidFunction vkGetInstanceProcAddr VkInstance instance const char* pName If pname:instance is `NULL`, pname:pName must: be one of: fname:vkEnumerateInstanceExtensionProperties, fname:vkEnumerateInstanceLayerProperties or fname:vkCreateInstance If pname:instance is not `NULL`, pname:pName must: be the name of a core command or a command from an enabled extension, other than: fname:vkEnumerateInstanceExtensionProperties, fname:vkEnumerateInstanceLayerProperties or fname:vkCreateInstance void vkGetPhysicalDeviceProperties VkPhysicalDevice physicalDevice VkPhysicalDeviceProperties* pProperties void vkGetPhysicalDeviceQueueFamilyProperties VkPhysicalDevice physicalDevice uint32_t* pQueueFamilyPropertyCount VkQueueFamilyProperties* pQueueFamilyProperties void vkGetPhysicalDeviceMemoryProperties VkPhysicalDevice physicalDevice VkPhysicalDeviceMemoryProperties* pMemoryProperties void vkGetPhysicalDeviceFeatures VkPhysicalDevice physicalDevice VkPhysicalDeviceFeatures* pFeatures void vkGetPhysicalDeviceFormatProperties VkPhysicalDevice physicalDevice VkFormat format VkFormatProperties* pFormatProperties VkResult vkGetPhysicalDeviceImageFormatProperties VkPhysicalDevice physicalDevice VkFormat format VkImageType type VkImageTiling tiling VkImageUsageFlags usage VkImageCreateFlags flags VkImageFormatProperties* pImageFormatProperties VkResult vkCreateDevice VkPhysicalDevice physicalDevice const VkDeviceCreateInfo* pCreateInfo const VkAllocationCallbacks* pAllocator VkDevice* pDevice void vkDestroyDevice VkDevice device const VkAllocationCallbacks* pAllocator 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 created, a compatible set of callbacks must: be provided here If no sname:VkAllocationCallbacks were provided when pname:device was created, pname:pAllocator must: be `NULL` VkResult vkEnumerateInstanceLayerProperties uint32_t* pPropertyCount VkLayerProperties* pProperties VkResult vkEnumerateInstanceExtensionProperties const char* pLayerName uint32_t* pPropertyCount VkExtensionProperties* pProperties If pname:pLayerName is not `NULL`, it must: be the name of a layer available on the system VkResult vkEnumerateDeviceLayerProperties VkPhysicalDevice physicalDevice uint32_t* pPropertyCount VkLayerProperties* pProperties VkResult vkEnumerateDeviceExtensionProperties VkPhysicalDevice physicalDevice const char* pLayerName uint32_t* pPropertyCount VkExtensionProperties* pProperties If pname:pLayerName is not `NULL`, it must: be the name of a layer available on the system void vkGetDeviceQueue VkDevice device uint32_t queueFamilyIndex uint32_t queueIndex VkQueue* pQueue pname:queueFamilyIndex must: be one of the queue family indexes specified when pname:device was created, via the sname:VkDeviceQueueCreateInfo structure 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 VkResult vkQueueSubmit VkQueue queue uint32_t submitCount const VkSubmitInfo* pSubmits VkFence fence pname:fence must: be unsignalled pname:fence mustnot: be associated with any other queue command that has not yet completed execution on that queue VkResult vkQueueWaitIdle VkQueue queue VkResult vkDeviceWaitIdle VkDevice device all sname:VkQueue objects created from pname:device VkResult vkAllocateMemory VkDevice device const VkMemoryAllocateInfo* pAllocateInfo const VkAllocationCallbacks* pAllocator VkDeviceMemory* pMemory The number of currently valid memory objects, allocated from pname:device, must: be less than sname:VkPhysicalDeviceLimits::pname:maxMemoryAllocationCount void vkFreeMemory VkDevice device VkDeviceMemory memory const VkAllocationCallbacks* pAllocator All submitted commands that refer to pname:memory (via images or buffers) must: have completed execution VkResult vkMapMemory VkDevice device VkDeviceMemory memory VkDeviceSize offset VkDeviceSize size VkMemoryMapFlags flags void** ppData pname:memory mustnot: 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, the sum of pname:offset and pname:size must: be less than or equal to the pname:size of the pname:memory pname:memory must: have been created with a memory type that reports ename:VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT void vkUnmapMemory VkDevice device VkDeviceMemory memory pname:memory must: currently be mapped VkResult vkFlushMappedMemoryRanges VkDevice device uint32_t memoryRangeCount const VkMappedMemoryRange* pMemoryRanges The memory ranges specified by pname:pMemoryRanges must: all currently be mapped VkResult vkInvalidateMappedMemoryRanges VkDevice device uint32_t memoryRangeCount const VkMappedMemoryRange* pMemoryRanges The memory ranges specified by pname:pMemoryRanges must: all currently be mapped void vkGetDeviceMemoryCommitment VkDevice device VkDeviceMemory memory VkDeviceSize* pCommittedMemoryInBytes pname:memory must: have been created with a memory type that reports ename:VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT void vkGetBufferMemoryRequirements VkDevice device VkBuffer buffer VkMemoryRequirements* pMemoryRequirements VkResult vkBindBufferMemory VkDevice device VkBuffer buffer VkDeviceMemory memory VkDeviceSize memoryOffset pname:buffer mustnot: already be backed by a memory object pname:buffer mustnot: 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 ename:VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT or ename:VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT, pname:memoryOffset must: be a multiple of the value of sname:VkPhysicalDeviceLimits::pname:minTexelBufferOffsetAlignment If pname:buffer was created with the ename:VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT, pname:memoryOffset must: be a multiple of the value of sname:VkPhysicalDeviceLimits::pname:minUniformBufferOffsetAlignment If pname:buffer was created with the ename:VK_BUFFER_USAGE_STORAGE_BUFFER_BIT, pname:memoryOffset must: be a multiple of the value of sname:VkPhysicalDeviceLimits::pname:minStorageBufferOffsetAlignment 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 The sum of pname:memoryOffset and the size of pname:buffer must: be less than or equal to the size of pname:memory 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 void vkGetImageMemoryRequirements VkDevice device VkImage image VkMemoryRequirements* pMemoryRequirements VkResult vkBindImageMemory VkDevice device VkImage image VkDeviceMemory memory VkDeviceSize memoryOffset pname:image mustnot: already be backed by a memory object pname:image mustnot: 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 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 member of the sname:VkMemoryRequirements structure returned from a call to fname:vkGetImageMemoryRequirements with pname:image pname:memory must: have storage from pname:memoryOffset onwards equal to or greater than the pname:size member of the sname:VkMemoryRequirements structure returned from a call to fname:vkGetImageMemoryRequirements with pname:image void vkGetImageSparseMemoryRequirements VkDevice device VkImage image uint32_t* pSparseMemoryRequirementCount VkSparseImageMemoryRequirements* pSparseMemoryRequirements pname:image must: have been created with the ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT flag void vkGetPhysicalDeviceSparseImageFormatProperties VkPhysicalDevice physicalDevice VkFormat format VkImageType type VkSampleCountFlagBits samples VkImageUsageFlags usage VkImageTiling tiling uint32_t* pPropertyCount VkSparseImageFormatProperties* pProperties If pname:format is an integer format, samples must: be one of the bit flag values specified in the value of sname:VkPhysicalDeviceLimits::pname:sampledImageIntegerSampleCounts If pname:format is a non-integer color format, samples must: be one of the bit flag values specified in the value of sname:VkPhysicalDeviceLimits::pname:sampledImageColorSampleCounts If pname:format is a depth format, samples must: be one of the bit flag values specified in the value of sname:VkPhysicalDeviceLimits::pname:sampledImageDepthSampleCounts If pname:format is a stencil format, samples must: be one of the bit flag values specified in the value of sname:VkPhysicalDeviceLimits::pname:sampledImageStencilSampleCounts If pname:usage includes ename:VK_IMAGE_USAGE_STORAGE_BIT, samples must: be one of the bit flag values specified in the value of sname:VkPhysicalDeviceLimits::pname:storageImageSampleCounts VkResult vkQueueBindSparse VkQueue queue uint32_t bindInfoCount const VkBindSparseInfo* pBindInfo VkFence fence pname:fence must: be unsignalled pname:fence mustnot: be associated with any other queue command that has not yet completed execution on that queue VkResult vkCreateFence VkDevice device const VkFenceCreateInfo* pCreateInfo const VkAllocationCallbacks* pAllocator VkFence* pFence void vkDestroyFence VkDevice device VkFence fence const VkAllocationCallbacks* pAllocator pname:fence mustnot: be associated with any queue command that has not yet completed execution on that queue 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 created, pname:pAllocator must: be `NULL` VkResult vkResetFences VkDevice device uint32_t fenceCount const VkFence* pFences Any given element of pname:pFences mustnot: currently be associated with any queue command that has not yet completed execution on that queue VkResult vkGetFenceStatus VkDevice device VkFence fence VkResult vkWaitForFences VkDevice device uint32_t fenceCount const VkFence* pFences VkBool32 waitAll uint64_t timeout VkResult vkCreateSemaphore VkDevice device const VkSemaphoreCreateInfo* pCreateInfo const VkAllocationCallbacks* pAllocator VkSemaphore* pSemaphore void vkDestroySemaphore VkDevice device VkSemaphore semaphore const VkAllocationCallbacks* pAllocator pname:semaphore mustnot: be associated with any queue command that has not yet completed execution on that queue 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 created, pname:pAllocator must: be `NULL` VkResult vkCreateEvent VkDevice device const VkEventCreateInfo* pCreateInfo const VkAllocationCallbacks* pAllocator VkEvent* pEvent void vkDestroyEvent VkDevice device VkEvent event const VkAllocationCallbacks* pAllocator All submitted commands that refer to pname:event must: have completed execution 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 created, pname:pAllocator must: be `NULL` VkResult vkGetEventStatus VkDevice device VkEvent event VkResult vkSetEvent VkDevice device VkEvent event VkResult vkResetEvent VkDevice device VkEvent event VkResult vkCreateQueryPool VkDevice device const VkQueryPoolCreateInfo* pCreateInfo const VkAllocationCallbacks* pAllocator VkQueryPool* pQueryPool void vkDestroyQueryPool VkDevice device VkQueryPool queryPool const VkAllocationCallbacks* pAllocator All submitted commands that refer to pname:queryPool must: have completed execution 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 created, pname:pAllocator must: be `NULL` VkResult vkGetQueryPoolResults VkDevice device VkQueryPool queryPool uint32_t firstQuery uint32_t queryCount size_t dataSize void* pData VkDeviceSize stride VkQueryResultFlags flags 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 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 and pname:stride must be multiples of `8` 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 query, as described <<queries-operation-memorylayout,here>> If the pname:queryType used to create pname:queryPool was ename:VK_QUERY_TYPE_TIMESTAMP, pname:flags mustnot: contain ename:VK_QUERY_RESULT_PARTIAL_BIT VkResult vkCreateBuffer VkDevice device const VkBufferCreateInfo* pCreateInfo const VkAllocationCallbacks* pAllocator VkBuffer* pBuffer If the pname:flags member of pname:pCreateInfo includes ename:VK_BUFFER_CREATE_SPARSE_BINDING_BIT or ename:VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT, creating this sname:VkBuffer mustnot: cause the total required sparse memory for all currently valid sparse resources on the device to exceed sname:VkPhysicalDeviceLimits::pname:sparseAddressSpaceSize void vkDestroyBuffer VkDevice device VkBuffer buffer const VkAllocationCallbacks* pAllocator 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 created, a compatible set of callbacks must: be provided here If no sname:VkAllocationCallbacks were provided when pname:buffer was created, pname:pAllocator must: be `NULL` VkResult vkCreateBufferView VkDevice device const VkBufferViewCreateInfo* pCreateInfo const VkAllocationCallbacks* pAllocator VkBufferView* pView void vkDestroyBufferView VkDevice device VkBufferView bufferView const VkAllocationCallbacks* pAllocator All submitted commands that refer to pname:bufferView must: have completed execution 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 was created, pname:pAllocator must: be `NULL` VkResult vkCreateImage VkDevice device const VkImageCreateInfo* pCreateInfo const VkAllocationCallbacks* pAllocator VkImage* pImage If the pname:flags member of pname:pCreateInfo includes ename:VK_IMAGE_CREATE_SPARSE_BINDING_BIT or ename:VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT, creating this sname:VkImage mustnot: cause the total required sparse memory for all currently valid sparse resources on the device to exceed sname:VkPhysicalDeviceLimits::pname:sparseAddressSpaceSize void vkDestroyImage VkDevice device VkImage image const VkAllocationCallbacks* pAllocator 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 created, a compatible set of callbacks must: be provided here If no sname:VkAllocationCallbacks were provided when pname:image was created, pname:pAllocator must: be `NULL` void vkGetImageSubresourceLayout VkDevice device VkImage image const VkImageSubresource* pSubresource VkSubresourceLayout* pLayout 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 single bit set VkResult vkCreateImageView VkDevice device const VkImageViewCreateInfo* pCreateInfo const VkAllocationCallbacks* pAllocator VkImageView* pView void vkDestroyImageView VkDevice device VkImageView imageView const VkAllocationCallbacks* pAllocator All submitted commands that refer to pname:imageView must: have completed execution 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 created, pname:pAllocator must: be `NULL` VkResult vkCreateShaderModule VkDevice device const VkShaderModuleCreateInfo* pCreateInfo const VkAllocationCallbacks* pAllocator VkShaderModule* pShaderModule void vkDestroyShaderModule VkDevice device VkShaderModule shaderModule const VkAllocationCallbacks* pAllocator 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 was created, pname:pAllocator must: be `NULL` VkResult vkCreatePipelineCache VkDevice device const VkPipelineCacheCreateInfo* pCreateInfo const VkAllocationCallbacks* pAllocator VkPipelineCache* pPipelineCache void vkDestroyPipelineCache VkDevice device VkPipelineCache pipelineCache const VkAllocationCallbacks* pAllocator 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 was created, pname:pAllocator must: be `NULL` VkResult vkGetPipelineCacheData VkDevice device VkPipelineCache pipelineCache size_t* pDataSize void* pData VkResult vkMergePipelineCaches VkDevice device VkPipelineCache dstCache uint32_t srcCacheCount const VkPipelineCache* pSrcCaches pname:dstCache mustnot: appear in the list of source caches VkResult vkCreateGraphicsPipelines VkDevice device VkPipelineCache pipelineCache uint32_t createInfoCount const VkGraphicsPipelineCreateInfo* pCreateInfos const VkAllocationCallbacks* pAllocator VkPipeline* pPipelines If the value of 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`, the value of pname:basePipelineIndex must: be less than the index into pname:pCreateInfos that corresponds to that element VkResult vkCreateComputePipelines VkDevice device VkPipelineCache pipelineCache uint32_t createInfoCount const VkComputePipelineCreateInfo* pCreateInfos const VkAllocationCallbacks* pAllocator VkPipeline* pPipelines If the value of 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`, the value of pname:basePipelineIndex must: be less than the index into pname:pCreateInfos that corresponds to that element void vkDestroyPipeline VkDevice device VkPipeline pipeline const VkAllocationCallbacks* pAllocator All submitted commands that refer to pname:pipeline must: have completed execution 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 created, pname:pAllocator must: be `NULL` VkResult vkCreatePipelineLayout VkDevice device const VkPipelineLayoutCreateInfo* pCreateInfo const VkAllocationCallbacks* pAllocator VkPipelineLayout* pPipelineLayout void vkDestroyPipelineLayout VkDevice device VkPipelineLayout pipelineLayout const VkAllocationCallbacks* pAllocator 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 pname:pipelineLayout was created, pname:pAllocator must: be `NULL` VkResult vkCreateSampler VkDevice device const VkSamplerCreateInfo* pCreateInfo const VkAllocationCallbacks* pAllocator VkSampler* pSampler void vkDestroySampler VkDevice device VkSampler sampler const VkAllocationCallbacks* pAllocator All submitted commands that refer to pname:sampler must: have completed execution 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 created, pname:pAllocator must: be `NULL` VkResult vkCreateDescriptorSetLayout VkDevice device const VkDescriptorSetLayoutCreateInfo* pCreateInfo const VkAllocationCallbacks* pAllocator VkDescriptorSetLayout* pSetLayout void vkDestroyDescriptorSetLayout VkDevice device VkDescriptorSetLayout descriptorSetLayout const VkAllocationCallbacks* pAllocator 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 pname:descriptorSetLayout was created, pname:pAllocator must: be `NULL` VkResult vkCreateDescriptorPool VkDevice device const VkDescriptorPoolCreateInfo* pCreateInfo const VkAllocationCallbacks* pAllocator VkDescriptorPool* pDescriptorPool void vkDestroyDescriptorPool VkDevice device VkDescriptorPool descriptorPool const VkAllocationCallbacks* pAllocator 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 was created, a compatible set of callbacks must: be provided here If no sname:VkAllocationCallbacks were provided when pname:descriptorPool was created, pname:pAllocator must: be `NULL` VkResult vkResetDescriptorPool VkDevice device VkDescriptorPool descriptorPool VkDescriptorPoolResetFlags flags any sname:VkDescriptorSet objects allocated from pname:descriptorPool All uses of pname:descriptorPool (via any allocated descriptor sets) must: have completed execution VkResult vkAllocateDescriptorSets VkDevice device const VkDescriptorSetAllocateInfo* pAllocateInfo VkDescriptorSet* pDescriptorSets VkResult vkFreeDescriptorSets VkDevice device VkDescriptorPool descriptorPool uint32_t descriptorSetCount const VkDescriptorSet* pDescriptorSets All submitted commands that refer to any element of pname:pDesciptorSets must: have completed execution 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 sname:VK_NULL_HANDLE pname:descriptorPool must: have been created with the ename:VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT flag void vkUpdateDescriptorSets VkDevice device uint32_t descriptorWriteCount const VkWriteDescriptorSet* pDescriptorWrites uint32_t descriptorCopyCount const VkCopyDescriptorSet* pDescriptorCopies VkResult vkCreateFramebuffer VkDevice device const VkFramebufferCreateInfo* pCreateInfo const VkAllocationCallbacks* pAllocator VkFramebuffer* pFramebuffer void vkDestroyFramebuffer VkDevice device VkFramebuffer framebuffer const VkAllocationCallbacks* pAllocator All submitted commands that refer to pname:framebuffer must: have completed execution 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 was created, pname:pAllocator must: be `NULL` VkResult vkCreateRenderPass VkDevice device const VkRenderPassCreateInfo* pCreateInfo const VkAllocationCallbacks* pAllocator VkRenderPass* pRenderPass void vkDestroyRenderPass VkDevice device VkRenderPass renderPass const VkAllocationCallbacks* pAllocator All submitted commands that refer to pname:renderPass must: have completed execution 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 was created, pname:pAllocator must: be `NULL` void vkGetRenderAreaGranularity VkDevice device VkRenderPass renderPass VkExtent2D* pGranularity VkResult vkCreateCommandPool VkDevice device const VkCommandPoolCreateInfo* pCreateInfo const VkAllocationCallbacks* pAllocator VkCommandPool* pCommandPool void vkDestroyCommandPool VkDevice device VkCommandPool commandPool const VkAllocationCallbacks* pAllocator All sname:VkCommandBuffer objects allocated from pname:commandPool mustnot: be pending execution 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 was created, pname:pAllocator must: be `NULL` VkResult vkResetCommandPool VkDevice device VkCommandPool commandPool VkCommandPoolResetFlags flags All sname:VkCommandBuffer objects allocated from pname:commandPool mustnot: currently be pending execution VkResult vkAllocateCommandBuffers VkDevice device const VkCommandBufferAllocateInfo* pAllocateInfo VkCommandBuffer* pCommandBuffers void vkFreeCommandBuffers VkDevice device VkCommandPool commandPool uint32_t commandBufferCount const VkCommandBuffer* pCommandBuffers All elements of pname:pCommandBuffers mustnot: be pending execution 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 sname:VK_NULL_HANDLE VkResult vkBeginCommandBuffer VkCommandBuffer commandBuffer const VkCommandBufferBeginInfo* pBeginInfo pname:commandBuffer mustnot: be in the recording state If pname:commandBuffer was allocated from a sname:VkCommandPool which did not have the ename:VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT flag set, pname:commandBuffer must: be in the initial state. 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 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 pname:pInheritanceInfo member pname:pBeginInfo mustnot: contain ename:VK_QUERY_CONTROL_PRECISE_BIT VkResult vkEndCommandBuffer VkCommandBuffer commandBuffer pname:commandBuffer must: be in the recording state fname:vkEndCommandBuffer mustnot: be called inside a render pass instance All queries made <<queries-operation-active,active>> during the recording of pname:commandBuffer must: have been made inactive VkResult vkResetCommandBuffer VkCommandBuffer commandBuffer VkCommandBufferResetFlags flags pname:commandBuffer mustnot: currently be pending execution pname:commandBuffer must: have been allocated from a pool that was created with the ename:VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT void vkCmdBindPipeline VkCommandBuffer commandBuffer VkPipelineBindPoint pipelineBindPoint VkPipeline pipeline If the value of pname:pipelineBindPoint is ename:VK_PIPELINE_BIND_POINT_COMPUTE, the sname:VkCommandPool that pname:commandBuffer was allocated from must: support compute operations If the value of pname:pipelineBindPoint is ename:VK_PIPELINE_BIND_POINT_GRAPHICS, the sname:VkCommandPool that pname:commandBuffer was allocated from must: support graphics operations If the value of pname:pipelineBindPoint is ename:VK_PIPELINE_BIND_POINT_COMPUTE, pname:pipeline must: be a compute pipeline If the value of pname:pipelineBindPoint is ename:VK_PIPELINE_BIND_POINT_GRAPHICS, pname:pipeline must: be a graphics pipeline 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 current subpass, then the sample count specified by this pipeline must: match that set in the previous pipeline void vkCmdSetViewport VkCommandBuffer commandBuffer uint32_t firstViewport uint32_t viewportCount const VkViewport* pViewports pname:firstViewport must: be less than sname:VkPhysicalDeviceLimits::pname:maxViewports The sum of pname:firstViewport and pname:viewportCount must: be between `1` and sname:VkPhysicalDeviceLimits::pname:maxViewports, inclusive void vkCmdSetScissor VkCommandBuffer commandBuffer uint32_t firstScissor uint32_t scissorCount const VkRect2D* pScissors pname:firstScissor must: be less than sname:VkPhysicalDeviceLimits::pname:maxViewports The sum of pname:firstScissor and pname:scissorCount must: be between `1` and sname:VkPhysicalDeviceLimits::pname:maxViewports, inclusive 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) mustnot: cause a signed integer addition overflow Evaluation of (pname:offset.y + pname:extent.height) mustnot: cause a signed integer addition overflow void vkCmdSetLineWidth VkCommandBuffer commandBuffer float lineWidth If the <<features-features-wideLines,wide lines>> feature is not enabled, the value of pname:lineWidth must: be `1.0` void vkCmdSetDepthBias VkCommandBuffer commandBuffer float depthBiasConstantFactor float depthBiasClamp float depthBiasSlopeFactor If the <<features-features-depthBiasClamp,depth bias clamping>> feature is not enabled, the value of pname:depthBiasClamp must: be code:0.0 void vkCmdSetBlendConstants VkCommandBuffer commandBuffer const float blendConstants[4] void vkCmdSetDepthBounds VkCommandBuffer commandBuffer float minDepthBounds float maxDepthBounds The value of pname:minDepthBounds must: be between `0.0` and `1.0`, inclusive The value of pname:maxDepthBounds must: be between `0.0` and `1.0`, inclusive void vkCmdSetStencilCompareMask VkCommandBuffer commandBuffer VkStencilFaceFlags faceMask uint32_t compareMask void vkCmdSetStencilWriteMask VkCommandBuffer commandBuffer VkStencilFaceFlags faceMask uint32_t writeMask void vkCmdSetStencilReference VkCommandBuffer commandBuffer VkStencilFaceFlags faceMask uint32_t reference void vkCmdBindDescriptorSets VkCommandBuffer commandBuffer VkPipelineBindPoint pipelineBindPoint VkPipelineLayout layout uint32_t firstSet uint32_t descriptorSetCount const VkDescriptorSet* pDescriptorSets uint32_t dynamicOffsetCount const uint32_t* pDynamicOffsets Any given element of pname:pDescriptorSets must: have been created with a sname:VkDescriptorSetLayout that matches the sname:VkDescriptorSetLayout at set _n_ in pname:layout, where _n_ is the sum of the index into pname:pDescriptorSets and pname:firstSet pname:dynamicOffsetCount must: be equal to the total number of dynamic descriptors in pname:pDescriptorSets 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 alignment for the corresponding descriptor binding's descriptor type void vkCmdBindIndexBuffer VkCommandBuffer commandBuffer VkBuffer buffer VkDeviceSize offset VkIndexType indexType The value of pname:offset must: be less than the size of pname:buffer The sum of pname:offset, and the address of the range of sname:VkDeviceMemory object that's backing pname:buffer, must: be a multiple of the type indicated by pname:indexType pname:buffer must: have been created with the ename:VK_BUFFER_USAGE_INDEX_BUFFER_BIT flag void vkCmdBindVertexBuffers VkCommandBuffer commandBuffer uint32_t firstBinding uint32_t bindingCount const VkBuffer* pBuffers const VkDeviceSize* pOffsets pname:firstBinding must: be less than sname:VkPhysicalDeviceLimits::pname:maxVertexInputBindings 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 corresponding element in pname:pBuffers All elements of pname:pBuffers must: have been created with the ename:VK_BUFFER_USAGE_VERTEX_BUFFER_BIT flag void vkCmdDraw VkCommandBuffer commandBuffer uint32_t vertexCount uint32_t instanceCount uint32_t firstVertex uint32_t firstInstance 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 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 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 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 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 with ename:VK_PIPELINE_BIND_POINT_GRAPHICS 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 pipeline via a descriptor set 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 mustnot: 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 sname:VkPipeline currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses unnormalized coordinates, it mustnot: 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 sname:VkPipeline currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses unnormalized coordinates, it mustnot: 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>> 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 mustnot: access values outside of the range of that buffer specified in the currently bound descriptor set 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 mustnot: access values outside of the range of that buffer specified in the currently bound descriptor set Any slink:VkImage 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 sname:VkFormatProperties::pname:linearTilingFeatures returned by fname:vkGetPhysicalDeviceFormatProperties void vkCmdDrawIndexed VkCommandBuffer commandBuffer uint32_t indexCount uint32_t instanceCount uint32_t firstIndex int32_t vertexOffset uint32_t firstInstance 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 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 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 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 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 with ename:VK_PIPELINE_BIND_POINT_GRAPHICS 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 The total value of (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 pipeline via a descriptor set 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 mustnot: 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 sname:VkPipeline currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses unnormalized coordinates, it mustnot: 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 sname:VkPipeline currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses unnormalized coordinates, it mustnot: 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>> 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 mustnot: access values outside of the range of that buffer specified in the currently bound descriptor set 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 mustnot: access values outside of the range of that buffer specified in the currently bound descriptor set Any slink:VkImage 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 sname:VkFormatProperties::pname:linearTilingFeatures returned by fname:vkGetPhysicalDeviceFormatProperties void vkCmdDrawIndirect VkCommandBuffer commandBuffer VkBuffer buffer VkDeviceSize offset uint32_t drawCount uint32_t stride The value of pname:offset must: be a multiple of `4` If pname:drawCount is greater than `1`, the value of 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>> feature is not enabled, the value of pname:drawCount must: be `0` or `1` 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 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 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 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 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 with ename:VK_PIPELINE_BIND_POINT_GRAPHICS 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`, the total value of (pname:offset + sizeof(sname:VkDrawIndirectCommand)) must: be less than or equal to the size of pname:buffer If pname:drawCount is greater than `1`, the total value of (pname:stride x (pname:drawCount - 1) + pname:offset + sizeof(sname:VkDrawIndirectCommand)) must: be less than or equal to the size of pname:buffer 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 pipeline via a descriptor set 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 mustnot: 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 sname:VkPipeline currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses unnormalized coordinates, it mustnot: 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 sname:VkPipeline currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses unnormalized coordinates, it mustnot: 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>> 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 mustnot: access values outside of the range of that buffer specified in the currently bound descriptor set 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 mustnot: access values outside of the range of that buffer specified in the currently bound descriptor set Any slink:VkImage 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 sname:VkFormatProperties::pname:linearTilingFeatures returned by fname:vkGetPhysicalDeviceFormatProperties void vkCmdDrawIndexedIndirect VkCommandBuffer commandBuffer VkBuffer buffer VkDeviceSize offset uint32_t drawCount uint32_t stride The value of pname:offset must: be a multiple of `4` If pname:drawCount is greater than `1`, the value of 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>> feature is not enabled, the value of pname:drawCount must: be `0` or `1` 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 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 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 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 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 with ename:VK_PIPELINE_BIND_POINT_GRAPHICS 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`, the total value of (pname:offset + sizeof(sname:VkDrawIndexedIndirectCommand)) must: be less than or equal to the size of pname:buffer If pname:drawCount is greater than `1`, the total value of (pname:stride x (pname:drawCount - 1) + pname:offset + sizeof(sname:VkDrawIndexedIndirectCommand)) must: be less than or equal to the size of pname:buffer 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 pipeline via a descriptor set 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 mustnot: 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 sname:VkPipeline currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses unnormalized coordinates, it mustnot: 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 sname:VkPipeline currently bound to ename:VK_PIPELINE_BIND_POINT_GRAPHICS uses unnormalized coordinates, it mustnot: 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>> 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 mustnot: access values outside of the range of that buffer specified in the currently bound descriptor set 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 mustnot: access values outside of the range of that buffer specified in the currently bound descriptor set Any slink:VkImage 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 sname:VkFormatProperties::pname:linearTilingFeatures returned by fname:vkGetPhysicalDeviceFormatProperties void vkCmdDispatch VkCommandBuffer commandBuffer uint32_t x uint32_t y uint32_t z pname:x must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[0] pname:y must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[1] pname:z must: be less than or equal to sname:VkPhysicalDeviceLimits::pname:maxComputeWorkGroupCount[2] 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 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 with ename:VK_PIPELINE_BIND_POINT_COMPUTE 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 sname:VkPipeline currently bound to ename:VK_PIPELINE_BIND_POINT_COMPUTE uses unnormalized coordinates, it mustnot: 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 sname:VkPipeline currently bound to ename:VK_PIPELINE_BIND_POINT_COMPUTE uses unnormalized coordinates, it mustnot: 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 sname:VkPipeline currently bound to ename:VK_PIPELINE_BIND_POINT_COMPUTE uses unnormalized coordinates, it mustnot: 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>> 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 mustnot: access values outside of the range of that buffer specified in the currently bound descriptor set 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 mustnot: access values outside of the range of that buffer specified in the currently bound descriptor set Any slink:VkImage 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 sname:VkFormatProperties::pname:linearTilingFeatures returned by fname:vkGetPhysicalDeviceFormatProperties void vkCmdDispatchIndirect VkCommandBuffer commandBuffer VkBuffer buffer VkDeviceSize offset 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 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 with ename:VK_PIPELINE_BIND_POINT_COMPUTE pname:buffer must: have been created with the ename:VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT bit set The value of pname:offset must: be a multiple of `4` 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 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 sname:VkPipeline currently bound to ename:VK_PIPELINE_BIND_POINT_COMPUTE uses unnormalized coordinates, it mustnot: 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 sname:VkPipeline currently bound to ename:VK_PIPELINE_BIND_POINT_COMPUTE uses unnormalized coordinates, it mustnot: 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 sname:VkPipeline currently bound to ename:VK_PIPELINE_BIND_POINT_COMPUTE uses unnormalized coordinates, it mustnot: 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>> 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 mustnot: access values outside of the range of that buffer specified in the currently bound descriptor set 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 mustnot: access values outside of the range of that buffer specified in the currently bound descriptor set Any slink:VkImage 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 sname:VkFormatProperties::pname:linearTilingFeatures returned by fname:vkGetPhysicalDeviceFormatProperties void vkCmdCopyBuffer VkCommandBuffer commandBuffer VkBuffer srcBuffer VkBuffer dstBuffer uint32_t regionCount const VkBufferCopy* pRegions The sum of the pname:srcOffset and pname:copySize members of a given element of pname:pRegions must: be less than or equal to the size of pname:srcBuffer The sum of the pname:dstOffset and pname:copySize members of a given element of pname:pRegions must: be less than or equal to the size of pname:dstBuffer The union of the source regions, and the union of the destination regions, specified by the elements of pname:pRegions, mustnot: overlap in memory pname:srcBuffer must: have been created with pname:VK_BUFFER_USAGE_TRANSFER_SRC_BIT usage flag pname:dstBuffer must: have been created with pname:VK_BUFFER_USAGE_TRANSFER_DST_BIT usage flag void vkCmdCopyImage VkCommandBuffer commandBuffer VkImage srcImage VkImageLayout srcImageLayout VkImage dstImage VkImageLayout dstImageLayout uint32_t regionCount const VkImageCopy* pRegions 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 must: be a region that is contained within pname:dstImage The union of all source regions, and the union of all destination regions, specified by the elements of pname:pRegions, mustnot: overlap in memory pname:srcImage must: have been created with pname:VK_IMAGE_USAGE_TRANSFER_SRC_BIT usage flag pname:srcImageLayout must: specify the layout of the subresources of pname:srcImage specified in pname:pRegions at the time this command is executed on a sname:VkDevice pname:srcImageLayout must: be either of VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL or VK_IMAGE_LAYOUT_GENERAL pname:dstImage must: have been created with pname:VK_IMAGE_USAGE_TRANSFER_DST_BIT usage flag pname:dstImageLayout must: specify the layout of the subresources of pname:dstImage specified in pname:pRegions at the time this command is executed on a sname:VkDevice pname:dstImageLayout must: be either of VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL or VK_IMAGE_LAYOUT_GENERAL 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 void vkCmdBlitImage VkCommandBuffer commandBuffer VkImage srcImage VkImageLayout srcImageLayout VkImage dstImage VkImageLayout dstImageLayout uint32_t regionCount const VkImageBlit* pRegions VkFilter filter 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 must: be a region that is contained within pname:dstImage The union of all source regions, and the union of all destination regions, specified by the elements of pname:pRegions, mustnot: overlap in memory pname:srcImage must: use a format that supports ename:VK_FORMAT_FEATURE_BLIT_SRC_BIT, which is indicated by sname:VkFormatProperties::pname:linearTilingFeatures (for linear tiled images) or sname:VkFormatProperties::pname:optimalTilingFeatures (for optimally tiled images) - as returned by fname:vkGetPhysicalDeviceFormatProperties pname:srcImage must: have been created with pname:VK_IMAGE_USAGE_TRANSFER_SRC_BIT usage flag pname:srcImageLayout must: specify the layout of the subresources of pname:srcImage specified in pname:pRegions at the time this command is executed on a sname:VkDevice pname:srcImageLayout must: be either of VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL or VK_IMAGE_LAYOUT_GENERAL pname:dstImage must: use a format that supports ename:VK_FORMAT_FEATURE_BLIT_DST_BIT, which is indicated by sname:VkFormatProperties::pname:linearTilingFeatures (for linear tiled images) or sname:VkFormatProperties::pname:optimalTilingFeatures (for optimally tiled images) - as returned by fname:vkGetPhysicalDeviceFormatProperties pname:dstImage must: have been created with pname:VK_IMAGE_USAGE_TRANSFER_DST_BIT usage flag pname:dstImageLayout must: specify the layout of the subresources of pname:dstImage specified in pname:pRegions at the time this command is executed on a sname:VkDevice pname:dstImageLayout must: be either of VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL or VK_IMAGE_LAYOUT_GENERAL 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 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 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 depth/stencil format, the other must: have exactly the same format If pname:srcImage was created with a depth/stencil format, pname:filter must: be ename:VK_FILTER_NEAREST void vkCmdCopyBufferToImage VkCommandBuffer commandBuffer VkBuffer srcBuffer VkImage dstImage VkImageLayout dstImageLayout uint32_t regionCount const VkBufferImageCopy* pRegions 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 a region that is contained within pname:dstImage The union of all source regions, and the union of all destination regions, specified by the elements of pname:pRegions, mustnot: overlap in memory pname:srcBuffer must: have been created with pname:VK_BUFFER_USAGE_TRANSFER_SRC_BIT usage flag pname:dstImage must: have been created with pname:VK_IMAGE_USAGE_TRANSFER_DST_BIT usage flag pname:dstImage must: have a sample count equal to ename:VK_SAMPLE_COUNT_1_BIT pname:dstImageLayout must: specify the layout of the subresources of pname:dstImage specified in pname:pRegions at the time this command is executed on a sname:VkDevice pname:dstImageLayout must: be either of VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL or VK_IMAGE_LAYOUT_GENERAL void vkCmdCopyImageToBuffer VkCommandBuffer commandBuffer VkImage srcImage VkImageLayout srcImageLayout VkBuffer dstBuffer uint32_t regionCount const VkBufferImageCopy* pRegions 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: be a region that is contained within pname:dstBuffer The union of all source regions, and the union of all destination regions, specified by the elements of pname:pRegions, mustnot: overlap in memory pname:srcImage must: have been created with pname:VK_IMAGE_USAGE_TRANSFER_SRC_BIT usage flag pname:srcImage must: have a sample count equal to ename:VK_SAMPLE_COUNT_1_BIT pname:srcImageLayout must: specify the layout of the subresources of pname:srcImage specified in pname:pRegions at the time this command is executed on a sname:VkDevice pname:srcImageLayout must: be either of VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL or VK_IMAGE_LAYOUT_GENERAL pname:dstBuffer must: have been created with pname:VK_BUFFER_USAGE_TRANSFER_DST_BIT usage flag void vkCmdUpdateBuffer VkCommandBuffer commandBuffer VkBuffer dstBuffer VkDeviceSize dstOffset VkDeviceSize dataSize const uint32_t* pData The sum of pname:dstOffset and pname:dataSize must: be less than or equal to the size of pname:dstBuffer pname:dstBuffer must: have been created with pname:VK_BUFFER_USAGE_TRANSFER_DST_BIT usage flag The value of pname:dstOffset must: be a multiple of `4` The value of pname:dataSize must: be greater than `0` The value of pname:dataSize must: be less than `65536` The value of pname:dataSize must: be a multiple of `4` void vkCmdFillBuffer VkCommandBuffer commandBuffer VkBuffer dstBuffer VkDeviceSize dstOffset VkDeviceSize size uint32_t data If pname:size is not equal to ename:VK_WHOLE_SIZE, the sum of pname:dstOffset and pname:size must: be less than or equal to the size of pname:dstBuffer pname:dstBuffer must: have been created with pname:VK_BUFFER_USAGE_TRANSFER_DST_BIT usage flag pname:dstOffset must: be a multiple of `4` If pname:size is not equal to ename:VK_WHOLE_SIZE, pname:size must: be a multiple of `4` void vkCmdClearColorImage VkCommandBuffer commandBuffer VkImage image VkImageLayout imageLayout const VkClearColorValue* pColor uint32_t rangeCount const VkImageSubresourceRange* pRanges pname:image must: have been created with pname:VK_IMAGE_USAGE_TRANSFER_DST_BIT usage flag pname:imageLayout must: specify the layout of the 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 VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL or VK_IMAGE_LAYOUT_GENERAL The image range of any given element of pname:pRanges must: be a subresource range that is contained within pname:image void vkCmdClearDepthStencilImage VkCommandBuffer commandBuffer VkImage image VkImageLayout imageLayout const VkClearDepthStencilValue* pDepthStencil uint32_t rangeCount const VkImageSubresourceRange* pRanges pname:image must: have been created with pname:VK_IMAGE_USAGE_TRANSFER_DST_BIT usage flag pname:imageLayout must: specify the layout of the 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 VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL or VK_IMAGE_LAYOUT_GENERAL The image range of any given element of pname:pRanges must: be a subresource range that is contained within pname:image void vkCmdClearAttachments VkCommandBuffer commandBuffer uint32_t attachmentCount const VkClearAttachment* pAttachments uint32_t rectCount const VkClearRect* pRects 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 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 contained within every attachment that pname:pAttachments refers to void vkCmdResolveImage VkCommandBuffer commandBuffer VkImage srcImage VkImageLayout srcImageLayout VkImage dstImage VkImageLayout dstImageLayout uint32_t regionCount const VkImageResolve* pRegions 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 must: be a region that is contained within pname:dstImage The union of all source regions, and the union of all destination regions, specified by the elements of pname:pRegions, mustnot: overlap in memory pname:srcImage must: have a sample count equal to any valid sample count value other than ename:VK_SAMPLE_COUNT_1_BIT pname:dstImage must: have a sample count equal to ename:VK_SAMPLE_COUNT_1_BIT pname:srcImageLayout must: specify the layout of the subresources of pname:srcImage specified in pname:pRegions at the time this command is executed on a sname:VkDevice pname:srcImageLayout must: be either of VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL or VK_IMAGE_LAYOUT_GENERAL pname:dstImageLayout must: specify the layout of the subresources of pname:dstImage specified in pname:pRegions at the time this command is executed on a sname:VkDevice pname:dstImageLayout must: be either of VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL or VK_IMAGE_LAYOUT_GENERAL 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 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 sname:VkFormatProperties::pname:optimalTilingFeatures returned by fname:vkGetPhysicalDeviceFormatProperties void vkCmdSetEvent VkCommandBuffer commandBuffer VkEvent event VkPipelineStageFlags stageMask If the <<features-features-geometryShader,geometry shaders>> feature is not enabled, pname:stageMask mustnot: contain pname:VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT If the <<features-features-tessellationShader,tessellation shaders>> feature is not enabled, pname:stageMask mustnot: contain pname:VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT or pname:VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT void vkCmdResetEvent VkCommandBuffer commandBuffer VkEvent event VkPipelineStageFlags stageMask If the <<features-features-geometryShader,geometry shaders>> feature is not enabled, pname:stageMask mustnot: contain pname:VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT If the <<features-features-tessellationShader,tessellation shaders>> feature is not enabled, pname:stageMask mustnot: contain pname:VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT or pname:VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT void vkCmdWaitEvents VkCommandBuffer commandBuffer uint32_t eventCount const VkEvent* pEvents VkPipelineStageFlags srcStageMask VkPipelineStageFlags dstStageMask uint32_t memoryBarrierCount const VkMemoryBarrier* pMemoryBarriers uint32_t bufferMemoryBarrierCount const VkBufferMemoryBarrier* pBufferMemoryBarriers uint32_t imageMemoryBarrierCount const VkImageMemoryBarrier* pImageMemoryBarriers 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 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 not enabled, pname:srcStageMask mustnot: contain pname:VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT If the <<features-features-geometryShader,geometry shaders>> feature is not enabled, pname:dstStageMask mustnot: contain pname:VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT If the <<features-features-tessellationShader,tessellation shaders>> feature is not enabled, pname:srcStageMask mustnot: contain pname:VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT or pname:VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT If the <<features-features-tessellationShader,tessellation shaders>> feature is not enabled, pname:dstStageMask mustnot: contain pname:VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT or pname:VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT 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 mustnot: be called inside a render pass instance void vkCmdPipelineBarrier VkCommandBuffer commandBuffer VkPipelineStageFlags srcStageMask VkPipelineStageFlags dstStageMask VkDependencyFlags dependencyFlags uint32_t memoryBarrierCount const VkMemoryBarrier* pMemoryBarriers uint32_t bufferMemoryBarrierCount const VkBufferMemoryBarrier* pBufferMemoryBarriers uint32_t imageMemoryBarrierCount const VkImageMemoryBarrier* pImageMemoryBarriers If the <<features-features-geometryShader,geometry shaders>> feature is not enabled, pname:srcStageMask mustnot: contain pname:VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT If the <<features-features-geometryShader,geometry shaders>> feature is not enabled, pname:dstStageMask mustnot: contain pname:VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT If the <<features-features-tessellationShader,tessellation shaders>> feature is not enabled, pname:srcStageMask mustnot: contain pname:VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT or pname:VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT If the <<features-features-tessellationShader,tessellation shaders>> feature is not enabled, pname:dstStageMask mustnot: contain pname:VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT or pname:VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT If fname:vkCmdPipelineBarrier is called within a render pass instance, the render pass must: declare at least one self-dependency from the current subpass to itself - see <<synchronization-pipeline-barriers-subpass-self-dependencies,Subpass Self-dependency>> void vkCmdBeginQuery VkCommandBuffer commandBuffer VkQueryPool queryPool uint32_t query VkQueryControlFlags flags 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 unavailable 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 mustnot: contain ename:VK_QUERY_CONTROL_PRECISE_BIT 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 ename:VK_QUERY_TYPE_OCCLUSION, the sname:VkCommandPool that pname:commandBuffer was created from must: support graphics operations 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 created from must: support graphics operations 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 created from must: support compute operations void vkCmdEndQuery VkCommandBuffer commandBuffer VkQueryPool queryPool uint32_t query 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 void vkCmdResetQueryPool VkCommandBuffer commandBuffer VkQueryPool queryPool uint32_t firstQuery uint32_t queryCount 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 equal to the number of queries in pname:queryPool void vkCmdWriteTimestamp VkCommandBuffer commandBuffer VkPipelineStageFlagBits pipelineStage VkQueryPool queryPool uint32_t query The query identified by pname:queryPool and pname:query must: be _unavailable_ The command pool's queue family must: support a non-zero value of pname:timestampValidBits void vkCmdCopyQueryPoolResults VkCommandBuffer commandBuffer VkQueryPool queryPool uint32_t firstQuery uint32_t queryCount VkBuffer dstBuffer VkDeviceSize dstOffset VkDeviceSize stride VkQueryResultFlags flags 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 equal to the number of queries in pname:queryPool 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 pname:dstOffset and pname:stride must be multiples of `8` pname:dstBuffer must: have enough storage, from pname:dstOffset, to contain the result of each query, as described <<queries-operation-memorylayout,here>> If the pname:queryType used to create pname:queryPool was ename:VK_QUERY_TYPE_TIMESTAMP, pname:flags mustnot: contain ename:VK_QUERY_RESULT_PARTIAL_BIT void vkCmdPushConstants VkCommandBuffer commandBuffer VkPipelineLayout layout VkShaderStageFlags stageFlags uint32_t offset uint32_t size const void* pValues 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` void vkCmdBeginRenderPass VkCommandBuffer commandBuffer const VkRenderPassBeginInfo* pRenderPassBegin VkSubpassContents contents 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 pname:pRenderPassBegin is ename:VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL then the corresponding attachment image of the framebuffer 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 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 pname:pRenderPassBegin is ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL or ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL then the corresponding attachment image 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 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 pname:pRenderPassBegin is ename:VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL then the corresponding attachment image of the framebuffer 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 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 pname:pRenderPassBegin is ename:VK_IMAGE_LAYOUT_TRANSFER_SRC_BIT then the corresponding attachment image 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 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 pname:pRenderPassBegin is ename:VK_IMAGE_LAYOUT_TRANSFER_DST_BIT then the corresponding attachment image 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 void vkCmdNextSubpass VkCommandBuffer commandBuffer VkSubpassContents contents The current subpass index must: be less than the number of subpasses in the render pass minus one void vkCmdEndRenderPass VkCommandBuffer commandBuffer The current subpass index must: be equal to the number of subpasses in the render pass minus one void vkCmdExecuteCommands VkCommandBuffer commandBuffer uint32_t commandBufferCount const VkCommandBuffer* pCommandBuffers pname:commandBuffer must: have been created with a pname:level value of VK_COMMAND_BUFFER_LEVEL_PRIMARY Any given element of pname:pCommandBuffers must: have been created with a pname:level value of VK_COMMAND_BUFFER_LEVEL_SECONDARY Any given element of pname:pCommandBuffers mustnot: be already pending execution in pname:commandBuffer, or appear twice in pname:pCommandBuffers, unless it was created with the ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT flag Any given element of pname:pCommandBuffers mustnot: be already pending execution in any other sname:VkCommandBuffer, unless it was created with the ename:VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT flag Any given element of pname:pCommandBuffers must: be in the executable state 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 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 instance, any given element of pname:pCommandBuffers must: have been recorded with the pname:subpass member of the pname:inheritanceInfo structure 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 instance, any given element of pname:pCommandBuffers must: have been recorded with a render pass that is compatible with the current render pass - see <<renderpass-compatibility>> If fname:vkCmdExecuteCommands is being called within a render pass instance, and any given element of pname:pCommandBuffers was recorded with the pname:framebuffer member of the sname:VkCommandBufferInheritanceInfo structure not equal to sname:VK_NULL_HANDLE, that sname:VkFramebuffer must: be compatible with the sname:VkFramebuffer used in the current render pass instance If the <<features-features-inheritedQueries,inherited queries>> feature is not enabled, pname:commandBuffer mustnot: have any queries <<queries-operation-active,active>> 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:VkCommandBufferBeginInfo::pname:occlusionQueryEnable set to ename:VK_TRUE 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:VkCommandBufferBeginInfo::pname:queryFlags having all bits set that are set for the query 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:VkCommandBufferBeginInfo::pname:pipelineStatistics having all bits set that are set in the sname:VkQueryPool the query uses Any given element of pname:pCommandBuffers mustnot: begin any query types that are <<queries-operation-active,active>> in pname:commandBuffer VkResult vkCreateAndroidSurfaceKHR VkInstance instance const VkAndroidSurfaceCreateInfoKHR* pCreateInfo const VkAllocationCallbacks* pAllocator VkSurfaceKHR* pSurface VkResult vkGetPhysicalDeviceDisplayPropertiesKHR VkPhysicalDevice physicalDevice uint32_t* pPropertyCount VkDisplayPropertiesKHR* pProperties VkResult vkGetPhysicalDeviceDisplayPlanePropertiesKHR VkPhysicalDevice physicalDevice uint32_t* pPropertyCount VkDisplayPlanePropertiesKHR* pProperties VkResult vkGetDisplayPlaneSupportedDisplaysKHR VkPhysicalDevice physicalDevice uint32_t planeIndex uint32_t* pDisplayCount VkDisplayKHR* pDisplays pname:planeIndex must: be less than the number of display planes supported by the device as determined by calling fname:vkGetPhysicalDeviceDisplayPlanePropertiesKHR VkResult vkGetDisplayModePropertiesKHR VkPhysicalDevice physicalDevice VkDisplayKHR display uint32_t* pPropertyCount VkDisplayModePropertiesKHR* pProperties VkResult vkCreateDisplayModeKHR VkPhysicalDevice physicalDevice VkDisplayKHR display const VkDisplayModeCreateInfoKHR*pCreateInfo const VkAllocationCallbacks* pAllocator VkDisplayModeKHR* pMode VkResult vkGetDisplayPlaneCapabilitiesKHR VkPhysicalDevice physicalDevice VkDisplayModeKHR mode uint32_t planeIndex VkDisplayPlaneCapabilitiesKHR* pCapabilities VkResult vkCreateDisplayPlaneSurfaceKHR VkInstance instance const VkDisplaySurfaceCreateInfoKHR* pCreateInfo const VkAllocationCallbacks* pAllocator VkSurfaceKHR* pSurface VkResult vkCreateSharedSwapchainsKHR VkDevice device uint32_t swapchainCount const VkSwapchainCreateInfoKHR* pCreateInfos const VkAllocationCallbacks* pAllocator VkSwapchainKHR* pSwapchains VkResult vkCreateMirSurfaceKHR VkInstance instance const VkMirSurfaceCreateInfoKHR* pCreateInfo const VkAllocationCallbacks* pAllocator VkSurfaceKHR* pSurface VkBool32 vkGetPhysicalDeviceMirPresentationSupportKHR VkPhysicalDevice physicalDevice uint32_t queueFamilyIndex MirConnection* connection pname:queueFamilyIndex must: be less than the value of pname:pQueueFamilyPropertyCount returned by fname:vkGetPhysicalDeviceQueueFamilyProperties for the given pname:physicalDevice void vkDestroySurfaceKHR VkInstance instance VkSurfaceKHR surface const VkAllocationCallbacks* pAllocator 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 created, a compatible set of callbacks must: be provided here If no sname:VkAllocationCallbacks were provided when pname:surface was created, pname:pAllocator must: be `NULL` VkResult vkGetPhysicalDeviceSurfaceSupportKHR VkPhysicalDevice physicalDevice uint32_t queueFamilyIndex VkSurfaceKHR surface VkBool32* pSupported pname:queueFamilyIndex must: be less than the value of pname:pQueueFamilyPropertyCount returned by fname:vkGetPhysicalDeviceQueueFamilyProperties for the given pname:physicalDevice VkResult vkGetPhysicalDeviceSurfaceCapabilitiesKHR VkPhysicalDevice physicalDevice VkSurfaceKHR surface VkSurfaceCapabilitiesKHR* pSurfaceCapabilities VkResult vkGetPhysicalDeviceSurfaceFormatsKHR VkPhysicalDevice physicalDevice VkSurfaceKHR surface uint32_t* pSurfaceFormatCount VkSurfaceFormatKHR* pSurfaceFormats VkResult vkGetPhysicalDeviceSurfacePresentModesKHR VkPhysicalDevice physicalDevice VkSurfaceKHR surface uint32_t* pPresentModeCount VkPresentModeKHR* pPresentModes VkResult vkCreateSwapchainKHR VkDevice device const VkSwapchainCreateInfoKHR* pCreateInfo const VkAllocationCallbacks* pAllocator VkSwapchainKHR* pSwapchain void vkDestroySwapchainKHR VkDevice device VkSwapchainKHR swapchain const VkAllocationCallbacks* pAllocator All uses of presentable images acquired from pname:swapchain and owned by the application must: have completed execution 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 created, pname:pAllocator must: be `NULL` VkResult vkGetSwapchainImagesKHR VkDevice device VkSwapchainKHR swapchain uint32_t* pSwapchainImageCount VkImage* pSwapchainImages VkResult vkAcquireNextImageKHR VkDevice device VkSwapchainKHR swapchain uint64_t timeout VkSemaphore semaphore VkFence fence uint32_t* pImageIndex If pname:semaphore is not sname:VK_NULL_HANDLE it must: be unsignalled If pname:fence is not sname:VK_NULL_HANDLE it must: be unsignalled and mustnot: be associated with any other queue command that has not yet completed execution on that queue VkResult vkQueuePresentKHR VkQueue queue const VkPresentInfoKHR* pPresentInfo 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 VkResult vkCreateWaylandSurfaceKHR VkInstance instance const VkWaylandSurfaceCreateInfoKHR* pCreateInfo const VkAllocationCallbacks* pAllocator VkSurfaceKHR* pSurface VkBool32 vkGetPhysicalDeviceWaylandPresentationSupportKHR VkPhysicalDevice physicalDevice uint32_t queueFamilyIndex struct wl_display* display pname:queueFamilyIndex must: be less than the value of pname:pQueueFamilyPropertyCount returned by fname:vkGetPhysicalDeviceQueueFamilyProperties for the given pname:physicalDevice VkResult vkCreateWin32SurfaceKHR VkInstance instance const VkWin32SurfaceCreateInfoKHR* pCreateInfo const VkAllocationCallbacks* pAllocator VkSurfaceKHR* pSurface VkBool32 vkGetPhysicalDeviceWin32PresentationSupportKHR VkPhysicalDevice physicalDevice uint32_t queueFamilyIndex pname:queueFamilyIndex must: be less than the value of pname:pQueueFamilyPropertyCount returned by fname:vkGetPhysicalDeviceQueueFamilyProperties for the given pname:physicalDevice VkResult vkCreateXlibSurfaceKHR VkInstance instance const VkXlibSurfaceCreateInfoKHR* pCreateInfo const VkAllocationCallbacks* pAllocator VkSurfaceKHR* pSurface VkBool32 vkGetPhysicalDeviceXlibPresentationSupportKHR VkPhysicalDevice physicalDevice uint32_t queueFamilyIndex Display* dpy VisualID visualID pname:queueFamilyIndex must: be less than the value of pname:pQueueFamilyPropertyCount returned by fname:vkGetPhysicalDeviceQueueFamilyProperties for the given pname:physicalDevice VkResult vkCreateXcbSurfaceKHR VkInstance instance const VkXcbSurfaceCreateInfoKHR* pCreateInfo const VkAllocationCallbacks* pAllocator VkSurfaceKHR* pSurface VkBool32 vkGetPhysicalDeviceXcbPresentationSupportKHR VkPhysicalDevice physicalDevice uint32_t queueFamilyIndex xcb_connection_t* connection xcb_visualid_t visual_id pname:queueFamilyIndex must: be less than the value of pname:pQueueFamilyPropertyCount returned by fname:vkGetPhysicalDeviceQueueFamilyProperties for the given pname:physicalDevice VkResult vkCreateDebugReportCallbackEXT VkInstance instance const VkDebugReportCallbackCreateInfoEXT* pCreateInfo const VkAllocationCallbacks* pAllocator VkDebugReportCallbackEXT* pCallback void vkDestroyDebugReportCallbackEXT VkInstance instance VkDebugReportCallbackEXT callback const VkAllocationCallbacks* pAllocator 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 created, pname:pAllocator must: be `NULL` void vkDebugReportMessageEXT VkInstance instance VkDebugReportFlagsEXT flags VkDebugReportObjectTypeEXT objectType uint64_t object size_t location int32_t messageCode const char* pLayerPrefix const char* pMessage pname:instance must: be a valid sname:VkInstance handle pname:flags must be a combination of one or more of sname:VkDebugReportFlagBitsEXT pname:objType must be one of sname:VkDebugReportObjectTypeEXT, ename:VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT if pname:object is `NULL` pname:object may be a {apiname} object pname:pLayerPrefix must: be a `NULL` terminated string. pname:pMsg must: be a `NULL` terminated string.