Vulkan11 Reference Guide
User Manual:
Open the PDF directly: View PDF
.
Page Count: 16

www.khronos.org/vulkan©2018 Khronos Group - Rev. 0318
Vulkan 1.1 Quick Reference Page 1
Vulkan
®
is a graphics and compute API consisng of procedures and
funcons to specify shader programs, compute kernels, objects,
and operaons involved in producing high-quality graphical images,
specically color images of three-dimensional objects. Vulkan is
also a pipeline with programmable and state-driven xed-funcon
stages that are invoked by a set of specic drawing operaons.
Specicaon and addional resources at
www.khronos.org/vulkan
Color coded names as follows: funcon names and structure names
[n.n.n] Indicates secons and text in the Vulkan API 1.1 Specicaon.
P.#
Indicates a page in this reference guide for more informaon.
= 0
Indicates reserved for future use.
Command Funcon Pointers and Instances [3]
Devices and Queues [4]
Physical Devices [4.1]
VkResult vkEnumeratePhysicalDevices(
VkInstance instance,
uint32_t* pPhysicalDeviceCount,
VkPhysicalDevice* pPhysicalDevices);
void vkGetPhysicalDeviceProperes(
VkPhysicalDevice physicalDevice,
VkPhysicalDeviceProperes* pProperes);
P.14
void vkGetPhysicalDeviceProperes2(
VkPhysicalDevice physicalDevice,
VkPhysicalDeviceProperes2* pProperes);
typedef struct VkPhysicalDeviceProperes2 {
VkStructureType sType;
void* pNext;
VkPhysicalDeviceProperes properes;
P.14
} VkPhysicalDeviceProperes2;
pNext may point to structs:
VkPhysicalDeviceIDProperes P.14
VkPhysicalDeviceMaintenance3Properes P.14
VkPhysicalDeviceMulviewProperes P.14
VkPhysicalDevicePointClippingProperes P.14
VkPhysicalDeviceProtectedMemoryProperes P.15
VkPhysicalDeviceSubgroupProperes P.15
void vkGetPhysicalDeviceQueueFamilyProperes(
VkPhysicalDevice physicalDevice,
uint32_t* pQueueFamilyPropertyCount,
VkQueueFamilyProperes*
pQueueFamilyProperes);
void vkGetPhysicalDeviceQueueFamilyProperes2(
VkPhysicalDevice physicalDevice,
uint32_t* pQueueFamilyPropertyCount,
VkQueueFamilyProperes2*pQueueFamilyProperes);
typedef struct VkQueueFamilyProperes {
VkQueueFlags queueFlags;
uint32_t queueCount;
uint32_t mestampValidBits;
VkExtent3D minImageTransferGranularity;
P.12
} VkQueueFamilyProperes;
queueFlags:
VK_QUEUE_X_BIT where X is GRAPHICS, COMPUTE,
TRANSFER, PROTECTED, SPARSE_BINDING
typedef struct VkQueueFamilyProperes2 {
VkStructureType sType;
void* pNext; VkQueueFamilyProperes
queueFamilyProperes;
} VkQueueFamilyProperes2;
Devices [4.2]
VkResult vkEnumeratePhysicalDeviceGroups(
VkInstance instance,
uint32_t* pPhysicalDeviceGroupCount,
VkPhysicalDeviceGroupProperes*
pPhysicalDeviceGroupProperes);
typedef struct VkPhysicalDeviceGroupProperes {
VkStructureType sType;
void* pNext;
uint32_t physicalDeviceCount;
VkPhysicalDevice physicalDevices[
VK_MAX_DEVICE_GROUP_SIZE];
VkBool32 subsetAllocaon;
} VkPhysicalDeviceGroupProperes;
Device Creaon [4.2.1]
VkResult vkCreateDevice(
VkPhysicalDevice physicalDevice,
const VkDeviceCreateInfo* pCreateInfo,
const VkAllocaonCallbacks* pAllocator,
P.12
VkDevice* pDevice);
typedef struct VkDeviceCreateInfo {
VkStructureType sType;
const void* pNext;
VkDeviceCreateFlags ags;
= 0
uint32_t queueCreateInfoCount;
const VkDeviceQueueCreateInfo* pQueueCreateInfos;
uint32_t enabledLayerCount;
const char* const* ppEnabledLayerNames;
uint32_t enabledExtensionCount;
const char* const* ppEnabledExtensionNames;
const VkPhysicalDeviceFeatures* pEnabledFeatures;
P.14
} VkDeviceCreateInfo;
pNext may point to structs:
VkDeviceGroupDeviceCreateInfo
P.12
VkPhysicalDevice16BitStorageFeatures
P.14
VkPhysicalDeviceFeatures2
P.14
VkPhysicalDeviceMulviewFeatures
P.14
VkPhysicalDeviceProtectedMemoryFeatures
P.15
VkPhysicalDeviceSamplerYcbcrConversionFeatures
P.15
VkPhysicalDeviceVariablePointerFeatures
P.15
typedef struct VkDeviceGroupDeviceCreateInfo {
VkStructureType sType;
const void* pNext;
uint32_t physicalDeviceCount;
const VkPhysicalDevice* pPhysicalDevices;
} VkDeviceGroupDeviceCreateInfo;
Device Destrucon [4.2.4]
void vkDestroyDevice(
VkDevice device,
const VkAllocaonCallbacks* pAllocator);
P.12
Command Buers [5]
Also see Command Buer Lifecycle diagram.
P.11
Command Pools [5.2]
VkResult vkCreateCommandPool(
VkDevice device,
const VkCommandPoolCreateInfo* pCreateInfo,
const VkAllocaonCallbacks* pAllocator,
P.12
VkCommandPool* pCommandPool);
typedef struct VkCommandPoolCreateInfo {
VkStructureType sType;
const void* pNext;
VkCommandPoolCreateFlags ags;
uint32_t queueFamilyIndex;
} VkCommandPoolCreateInfo;
ags: VK_COMMAND_POOL_CREATE_X_BIT where X is
PROTECTED, RESET_COMMAND_BUFFER, TRANSIENT
void vkTrimCommandPool(VkDevice device,
VkCommandPool commandPool,
VkCommandPoolTrimFlags ags);
= 0
VkResult vkResetCommandPool(
VkDevice device, VkCommandPool commandPool,
VkCommandPoolResetFlags ags);
ags: VK_COMMAND_POOL_RESET_RELEASE_-
RESOURCES_BIT
void vkDestroyCommandPool(
VkDevice device, VkCommandPool commandPool,
const VkAllocaonCallbacks* pAllocator);
P.12
Connued on next page >
Command Funcon Pointers [3.1]
PFN_vkVoidFuncon vkGetInstanceProcAddr(
VkInstance instance, const char *pName);
PFN_vkVoidFuncon vkGetDeviceProcAddr(
VkDevice device, const char *pName);
PFN_vkVoidFuncon is:
typedef void(VKAPI_PTR *PFN_vkVoidFuncon)(void);
Instances [3.2]
VkResult vkEnumerateInstanceVersion(
uint32_t* pApiVersion);
VkResult vkCreateInstance(
const VkInstanceCreateInfo* pCreateInfo,
const VkAllocaonCallbacks *pAllocator,
P.12
VkInstance *pInstance);
typedef struct VkInstanceCreateInfo {
VkStructureType sType;
const void *pNext;
VkInstanceCreateFlags ags;
= 0
const VkApplicaonInfo* pApplicaonInfo;
uint32_t enabledLayerCount;
const char* const* ppEnabledLayerNames;
uint32_t enabledExtensionCount;
const char* const* ppEnabledExtensionNames;
} VkInstanceCreateInfo;
typedef struct VkApplicaonInfo {
VkStructureType sType;
const void *pNext;
const char* pApplicaonName;
uint32_t applicaonVersion;
const char* pEngineName;
uint32_t engineVersion;
uint32_t apiVersion;
} VkApplicaonInfo;
void vkDestroyInstance(
VkInstance instance,
const VkAllocaonCallbacks *pAllocator);
P.12
Return Codes [2.7.3]
Return codes are reported via VkResult return values.
Success Codes
Success codes are non-negave.
VK_SUCCESS VK_NOT_READY
VK_TIMEOUT VK_EVENT_{SET, RESET}
VK_INCOMPLETE VK_SUBOPTIMAL_KHR
Error Codes
Error codes are negave.
VK_ERROR_OUT_OF_{HOST, DEVICE}_MEMORY
VK_ERROR_{INITIALIZATION, MEMORY_MAP}_FAILED
VK_ERROR_DEVICE_LOST
VK_ERROR_{EXTENSION, FEATURE, LAYER}_NOT_PRESENT
VK_ERROR_INCOMPATIBLE_DRIVER
VK_ERROR_TOO_MANY_OBJECTS
VK_ERROR_FORMAT_NOT_SUPPORTED
VK_ERROR_FRAGMENTED_POOL
VK_ERROR_OUT_OF_POOL_MEMORY
VK_ERROR_INVALID_EXTERNAL_HANDLE
VK_ERROR_SURFACE_LOST_KHR
VK_ERROR_NATIVE_WINDOW_IN_USE_KHR
VK_ERROR_OUT_OF_DATE_KHR
VK_ERROR_INCOMPATIBLE_DISPLAY_KHR
Queues [4.3]
typedef struct VkDeviceQueueCreateInfo {
VkStructureType sType;
const void* pNext;
VkDeviceQueueCreateFlags ags;
uint32_t queueFamilyIndex;
uint32_t queueCount;
const oat* pQueuePriories;
} VkDeviceQueueCreateInfo;
ags: VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT
void vkGetDeviceQueue(VkDevice device,
uint32_t queueFamilyIndex, uint32_t queueIndex,
VkQueue* pQueue);
void vkGetDeviceQueue2(VkDevice device,
const VkDeviceQueueInfo2* pQueueInfo,
VkQueue* pQueue);
typedef struct VkDeviceQueueInfo2 {
VkStructureType sType; const void* pNext;
VkDeviceQueueCreateFlags ags;
uint32_t queueFamilyIndex; uint32_t queueIndex;
} VkDeviceQueueInfo2;
ags: VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT

www.khronos.org/vulkan
©2018 Khronos Group - Rev. 0318
Vulkan 1.1 Quick Reference Page 2
Synchronizaon and Cache Control [6]
Fences [6.3]
Fence status is always either signaled or unsignaled.
VkResult vkCreateFence(
VkDevice device, const VkFenceCreateInfo* pCreateInfo,
const VkAllocaonCallbacks* pAllocator,
P.12
VkFence* pFence);
typedef struct VkFenceCreateInfo {
VkStructureType sType;
const void* pNext;
VkFenceCreateFlags ags;
} VkFenceCreateInfo;
ags: VK_FENCE_CREATE_SIGNALED_BIT
pNext may point to struct:
VkExportFenceCreateInfo
P.12
void vkDestroyFence(
VkDevice device, VkFence fence,
const VkAllocaonCallbacks* pAllocator);
P.12
VkResult vkGetFenceStatus(
VkDevice device, VkFence fence);
VkResult vkResetFences(VkDevice device,
uint32_t fenceCount, const VkFence* pFences);
VkResult vkWaitForFences(VkDevice device,
uint32_t fenceCount, const VkFence* pFences,
VkBool32 waitAll, uint64_t meout);
Semaphores [6.4]
Semaphore status is always either signaled or unsignaled.
VkResult vkCreateSemaphore(
VkDevice device,
const VkSemaphoreCreateInfo* pCreateInfo,
const VkAllocaonCallbacks* pAllocator,
P.12
VkSemaphore* pSemaphore);
typedef struct VkSemaphoreCreateInfo {
VkStructureType sType; const void* pNext;
VkSemaphoreCreateFlags ags;
= 0
} VkSemaphoreCreateInfo;
pNext may point to struct:
VkExportSemaphoreCreateInfo
P.12
void vkDestroySemaphore(
VkDevice device, VkSemaphore semaphore,
const VkAllocaonCallbacks* pAllocator);
P.12
Events [6.5]
Events represent a ne-grained synchronizaon primive
that can be used to gauge progress through a sequence of
commands executed on a queue.
VkResult vkCreateEvent(
VkDevice device, const VkEventCreateInfo* pCreateInfo,
const VkAllocaonCallbacks* pAllocator,
P.12
VkEvent* pEvent);
typedef struct VkEventCreateInfo {
VkStructureType sType;
const void* pNext;
VkEventCreateFlags ags;
= 0
} VkEventCreateInfo;
void vkDestroyEvent(VkDevice device, VkEvent event,
const VkAllocaonCallbacks* pAllocator);
P.12
VkResult vkGetEventStatus(
VkDevice device, VkEvent event);
VkResult vk[Set, Reset]Event(
VkDevice device, VkEvent event);
VkResult vkCmd[Set, Reset]Event(
VkCommandBuer commandBuer, VkEvent event,
VkPipelineStageFlags stageMask);
P.15
void vkCmdWaitEvents(
VkCommandBuer commandBuer,
uint32_t eventCount,
const VkEvent* pEvents,
VkPipelineStageFlags srcStageMask,
P.15
VkPipelineStageFlags dstStageMask,
P.15
uint32_t memoryBarrierCount,
const VkMemoryBarrier* pMemoryBarriers,
P.13
uint32_t buerMemoryBarrierCount,
const VkBuerMemoryBarrier*
pBuerMemoryBarriers,
P.12
uint32_t imageMemoryBarrierCount,
const VkImageMemoryBarrier*
pImageMemoryBarriers);
P.13
Command Buers (connued)
Command Buer Lifeme [5.3]
VkResult vkAllocateCommandBuers(
VkDevice device,
const VkCommandBuerAllocateInfo* pAllocateInfo,
VkCommandBuer* pCommandBuers);
typedef struct VkCommandBuerAllocateInfo{
VkStructureType sType;
const void* pNext;
VkCommandPool commandPool;
VkCommandBuerLevel level;
uint32_t commandBuerCount;
} VkCommandBuerAllocateInfo;
level:
VK_COMMAND_BUFFER_LEVEL_{PRIMARY, SECONDARY}
VkResult vkResetCommandBuer(
VkCommandBuer commandBuer,
VkCommandBuerResetFlags ags);
ags:
VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT
void vkFreeCommandBuers(
VkDevice device, VkCommandPool commandPool,
uint32_t commandBuerCount,
const VkCommandBuer* pCommandBuers);
Command Buer Recording [5.4]
VkResult vkBeginCommandBuer(
VkCommandBuer commandBuer,
const VkCommandBuerBeginInfo* pBeginInfo);
typedef struct VkCommandBuerBeginInfo{
VkStructureType sType;
const void* pNext;
VkCommandBuerUsageFlags ags;
const VkCommandBuerInheritanceInfo* pInheritanceInfo;
} VkCommandBuerBeginInfo;
ags: VK_COMMAND_BUFFER_USAGE_X _BIT where X is
ONE_TIME_SUBMIT, RENDER_PASS_CONTINUE,
SIMULTANEOUS_USE
pNext may point to struct:
VkDeviceGroupCommandBuerBeginInfo
P.12
typedef struct VkCommandBuerInheritanceInfo {
VkStructureType sType;
const void* pNext;
VkRenderPass renderPass;
uint32_t subpass;
VkFramebuer framebuer;
VkBool32 occlusionQueryEnable;
VkQueryControlFlags queryFlags;
VkQueryPipelineStascFlags pipelineStascs;
P.15
} VkCommandBuerInheritanceInfo;
queryFlags: VK_QUERY_CONTROL_PRECISE_BIT
VkResult vkEndCommandBuer(
VkCommandBuer commandBuer);
Command Buer Submission [5.5]
VkResult vkQueueSubmit(
VkQueue queue, uint32_t submitCount,
const VkSubmitInfo* pSubmits, VkFence fence);
typedef struct VkSubmitInfo{
VkStructureType sType;
const void* pNext;
uint32_t waitSemaphoreCount;
const VkSemaphore* pWaitSemaphores;
const VkPipelineStageFlags* pWaitDstStageMask;
P.15
uint32_t commandBuerCount;
const VkCommandBuer* pCommandBuers;
uint32_t signalSemaphoreCount;
const VkSemaphore* pSignalSemaphores;
} VkSubmitInfo;
pNext may point to structs:
VkDeviceGroupSubmitInfo
P.12
VkProtectedSubmitInfo
P.15
Secondary Command Buer Execuon [5.7]
void vkCmdExecuteCommands(
VkCommandBuer commandBuer,
uint32_t commandBuerCount,
const VkCommandBuer* pCommandBuers);
Command Buer Device Mask [5.8]
void vkCmdSetDeviceMask(
VkCommandBuer commandBuer,
uint32_t deviceMask);
Pipeline Barriers [6.6]
void vkCmdPipelineBarrier(
VkCommandBuer commandBuer,
VkPipelineStageFlags srcStageMask,
P.15
VkPipelineStageFlags dstStageMask,
P.15
VkDependencyFlags dependencyFlags,
P.1512
uint32_t memoryBarrierCount,
const VkMemoryBarrier* pMemoryBarriers,
P.13
uint32_t buerMemoryBarrierCount,
const VkBuerMemoryBarrier*
pBuerMemoryBarriers,
P.12
uint32_t imageMemoryBarrierCount,
const VkImageMemoryBarrier*
pImageMemoryBarriers);
P.13
Wait Idle Operaons [6.8]
VkResult vkQueueWaitIdle(VkQueue queue);
VkResult vkDeviceWaitIdle(VkDevice device);
Notes

www.khronos.org/vulkan©2018 Khronos Group - Rev. 0318
Vulkan 1.1 Quick Reference Page 3
Pipelines [9]
Compute Pipelines [9.1]
Compute pipelines consist of a single stac compute shader
stage and the pipeline layout.
VkResult vkCreateComputePipelines(
VkDevice device, VkPipelineCache pipelineCache,
uint32_t createInfoCount,
const VkComputePipelineCreateInfo* pCreateInfos,
const VkAllocaonCallbacks* pAllocator,
P.12
VkPipeline* pPipelines);
typedef struct VkComputePipelineCreateInfo {
VkStructureType sType; const void* pNext;
VkPipelineCreateFlags ags;
P.15
VkPipelineShaderStageCreateInfo stage;
P.15
VkPipelineLayout layout;
VkPipeline basePipelineHandle;
int32_t basePipelineIndex;
} VkComputePipelineCreateInfo;
Graphics Pipelines [9.2]
VkResult vkCreateGraphicsPipelines(
VkDevice device,
VkPipelineCache pipelineCache,
uint32_t createInfoCount,
const VkGraphicsPipelineCreateInfo* pCreateInfos,
const VkAllocaonCallbacks* pAllocator,
P.12
VkPipeline* pPipelines);
In VkGraphicsPipelineCreateInfo below, replace X with
VkPipeline and replace Y with StateCreateInfo. For example,
XVertexInputY would be VxPipelineVertexInputStateCreateInfo.
typedef struct VkGraphicsPipelineCreateInfo {
VkStructureType sType;
const void* pNext;
VkPipelineCreateFlags ags;
P.15
uint32_t stageCount;
const VkPipelineShaderStageCreateInfo* pStages;
P.15
const XVertexInputY* pVertexInputState;
const XInputAssemblyY* pInputAssemblyState;
const XTessellaonY* pTessellaonState;
const XViewportY* pViewportState;
const XRasterizaonY* pRasterizaonState;
const XMulsampleY* pMulsampleState;
const XDepthStencilY* pDepthStencilState;
const XColorBlendY* pColorBlendState;
const XDynamicY* pDynamicState;
VkPipelineLayout layout;
VkRenderPass renderPass;
uint32_t subpass;
VkPipeline basePipelineHandle;
int32_t basePipelineIndex;
} VkGraphicsPipelineCreateInfo;
typedef struct VkPipelineVertexInputStateCreateInfo {
VkStructureType sType;
const void* pNext;
VkPipelineVertexInputStateCreateFlags ags;
= 0
uint32_t vertexBindingDescriponCount;
const VkVertexInputBindingDescripon*
pVertexBindingDescripons;
uint32_t vertexAributeDescriponCount;
const VkVertexInputAributeDescripon*
pVertexAributeDescripons;
} VkPipelineVertexInputStateCreateInfo;
typedef struct VkVertexInputBindingDescripon {
uint32_t binding;
uint32_t stride;
VkVertexInputRate inputRate;
} VkVertexInputBindingDescripon;
inputRate:
VK_VERTEX_INPUT_RATE_{VERTEX, INSTANCE}
Connued on next page >
Shaders [8]
Shader Modules [8.1]
VkResult vkCreateShaderModule(
VkDevice device,
const VkShaderModuleCreateInfo* pCreateInfo,
const VkAllocaonCallbacks* pAllocator,
P.12
VkShaderModule* pShaderModule);
typedef struct VkShaderModuleCreateInfo {
VkStructureType sType;
const void* pNext;
VkShaderModuleCreateFlags ags;
= 0
size_t codeSize;
const uint32_t* pCode;
} VkShaderModuleCreateInfo;
void vkDestroyShaderModule(
VkDevice device,
VkShaderModule shaderModule,
const VkAllocaonCallbacks* pAllocator);
P.12
Built-in Variables [14.6]
The built-in variables listed below are accessed in shaders by
declaring the variable using a BuiltIn decoraon.
Decoraon Type
BaseInstance Scalar 32-bit integer
BaseVertex Scalar 32-bit integer
ClipDistance Array of 32-bit oats
CullDistance Array of 32-bit oats
DeviceIndex Scalar 32-bit integer
DrawIndex Scalar 32-bit integer
FragCoord 4-component vector of 32-bit oats
FragDepth Scalar 32-bit oat
FrontFacing Scalar 32-bit integer
GlobalInvocaonID 3-component vector of 32-bit ints
HelperInvocaon Scalar 32-bit integer
InvocaonID Scalar 32-bit integer
InstanceIndex Scalar 32-bit integer
Layer Scalar 32-bit integer
LocalInvocaonID 3-component vector of 32-bit ints
NumSubgroups Scalar 32-bit integer
NumWorkGroups 3-component vector of 32-bit ints
PatchVerces Scalar 32-bit integer
PointCoord 2-component vector of 32-bit oats
PointSize Scalar 32-bit oat value
Posion 4-component vector of 32-bit oats
PrimiveID Scalar 32-bit integer
SampleID Scalar 32-bit integer
SampleMask Array of 32-bit integers
SamplePosion 2-component vector of oat values
SubgroupId Scalar 32-bit integer
Subgroup{Eq,Ge,Gt,Le,Lt}Mask 4-component vector of 32-bit ints
SubgroupLocalInvocaonId Scalar 32-bit integer
SubgroupSize Scalar 32-bit integer
TessCoord 3-component vector of 32-bit oats
TessLevelOuter Array of size 2 of 32-bit oats
TessLevelInner Array of size 4 of 32-bit oats
VertexIndex 32-bit integer
ViewIndex Scalar 32-bit integer
ViewportIndex 32-bit integer
WorkgroupSize 3-component vector of 32-bit ints
WorkgroupID 3-component vector of 32-bit ints
Render Pass [7]
A render pass represents a collecon of aachments,
subpasses, and dependencies between the subpasses, and
describes how the aachments are used over the course of
the subpasses.
Render Pass Creaon [7.1]
VkResult vkCreateRenderPass(VkDevice device,
const VkRenderPassCreateInfo* pCreateInfo,
const VkAllocaonCallbacks* pAllocator,
P.12
VkRenderPass* pRenderPass);
typedef struct VkRenderPassCreateInfo {
VkStructureType sType;
const void* pNext;
VkRenderPassCreateFlags ags;
= 0
uint32_t aachmentCount;
const VkAachmentDescripon* pAachments;
uint32_t subpassCount;
const VkSubpassDescripon* pSubpasses;
uint32_t dependencyCount;
const VkSubpassDependency* pDependencies;
} VkRenderPassCreateInfo;
pNext may point to structs:
VkRenderPassInputAachmentAspectCreateInfo
P.1315
VkRenderPassMulviewCreateInfo
P.1315
typedef struct VkAachmentDescripon {
VkAachmentDescriponFlags ags;
VkFormat format;
P.13
VkSampleCountFlagBits samples;
P.15
VkAachmentLoadOp loadOp;
VkAachmentStoreOp storeOp;
VkAachmentLoadOp stencilLoadOp;
VkAachmentStoreOp stencilStoreOp;
VkImageLayout inialLayout;
P.13
VkImageLayout nalLayout;
P.13
} VkAachmentDescripon;
ags: VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT
loadOp, stencilLoadOp: VK_ATTACHMENT_LOAD_OP_X
where X is LOAD, CLEAR, DONT_CARE
storeOp, stencilStoreOp: VK_ATTACHMENT_STORE_OP_X
where X is STORE, DONT_CARE
typedef struct VkSubpassDescripon {
VkSubpassDescriponFlags ags;
VkPipelineBindPoint pipelineBindPoint;
P.1315
uint32_t inputAachmentCount;
const VkAachmentReference* pInputAachments;
uint32_t colorAachmentCount;
const VkAachmentReference* pColorAachments;
const VkAachmentReference*
pResolveAachments;
const VkAachmentReference*
pDepthStencilAachment;
uint32_t preserveAachmentCount;
const uint32_t* pPreserveAachments;
} VkSubpassDescripon;
typedef struct VkAachmentReference {
uint32_t aachment;
VkImageLayout layout;
P.13
} VkAachmentReference;
typedef struct VkSubpassDependency {
uint32_t srcSubpass;
uint32_t dstSubpass;
VkPipelineStageFlags srcStageMask;
P.15
VkPipelineStageFlags dstStageMask;
P.12
VkAccessFlags srcAccessMask;
P.12
VkAccessFlags dstAccessMask;
P.12
VkDependencyFlags dependencyFlags;
P.1512
} VkSubpassDependency;
void vkDestroyRenderPass(VkDevice device,
VkRenderPass renderPass,
const VkAllocaonCallbacks* pAllocator);
P.12
Framebuers [7.3]
VkResult vkCreateFramebuer(VkDevice device,
const VkFramebuerCreateInfo* pCreateInfo,
const VkAllocaonCallbacks* pAllocator,
P.12
VkFramebuer* pFramebuer);
typedef struct VkFramebuerCreateInfo {
VkStructureType sType;
const void* pNext;
VkFramebuerCreateFlags ags;
= 0
VkRenderPass renderPass;
uint32_t aachmentCount;
const VkImageView* pAachments;
uint32_t width;
uint32_t height;
uint32_t layers;
} VkFramebuerCreateInfo;
void vkDestroyFramebuer(
VkDevice device, VkFramebuer framebuer,
const VkAllocaonCallbacks* pAllocator);
P.12
Render Pass Commands [7.4]
void vkCmdBeginRenderPass(
VkCommandBuer commandBuer,
const VkRenderPassBeginInfo* pRenderPassBegin,
VkSubpassContents contents);
contents: VK_SUBPASS_CONTENTS_X where X is INLINE,
SECONDARY_COMMAND_BUFFERS
typedef struct VkRenderPassBeginInfo {
VkStructureType sType;
const void* pNext;
VkRenderPass renderPass;
VkFramebuer framebuer;
VkRect2D renderArea;
P.15
uint32_t clearValueCount;
const VkClearValue* pClearValues;
P.12
} VkRenderPassBeginInfo;
pNext may point to struct:
VkDeviceGroupRenderPassBeginInfo
P.12
void vkGetRenderAreaGranularity(
VkDevice device, VkRenderPass renderPass,
VkExtent2D* pGranularity);
P.12
void vkCmdNextSubpass(
VkCommandBuer commandBuer,
VkSubpassContents contents);
contents: VK_SUBPASS_CONTENTS_X where X is
INLINE, SECONDARY_COMMAND_BUFFERS
void vkCmdEndRenderPass(
VkCommandBuer commandBuer);

www.khronos.org/vulkan
©2018 Khronos Group - Rev. 0318
Vulkan 1.1 Quick Reference Page 4
Memory Allocaon [10]
Device Memory [10.2]
Device memory is memory that is visible to the device.
void vkGetPhysicalDeviceMemoryProperes(
VkPhysicalDevice physicalDevice,
VkPhysicalDeviceMemoryProperes*
pMemoryProperes);
P.14
void vkGetPhysicalDeviceMemoryProperes2(
VkPhysicalDevice physicalDevice,
VkPhysicalDeviceMemoryProperes2*
pMemoryProperes);
typedef struct VkPhysicalDeviceMemoryProperes2 {
VkStructureType sType; void* pNext;
VkPhysicalDeviceMemoryProperes
memoryProperes;
P.14
} VkPhysicalDeviceMemoryProperes2;
VkResult vkAllocateMemory(
VkDevice device,
const VkMemoryAllocateInfo* pAllocateInfo,
const VkAllocaonCallbacks* pAllocator,
P.12
VkDeviceMemory* pMemory);
typedef struct VkMemoryAllocateInfo {
VkStructureType sType; const void* pNext;
VkDeviceSize* allocaonSize;
uint32_t memoryTypeIndex;
} VkMemoryAllocateInfo;
pNext may point to structs:
VkExportMemoryAllocateInfo
P.12
VkMemoryAllocateFlagsInfo
P.13
VkMemoryDedicatedAllocateInfo
P.13
void vkFreeMemory(
VkDevice device,
VkDeviceMemory memory,
const VkAllocaonCallbacks* pAllocator);
P.12
Host Access to Device Memory Objects [10.2.1]
Memory objects created with vkAllocateMemory are not
directly host accessible. Memory objects created with memory
property VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT are
considered mappable. Memory objects must be mappable in
order to be successfully mapped on the host.
VkResult vkMapMemory(
VkDevice device,
VkDeviceMemory memory,
VkDeviceSize oset,
VkDeviceSize size,
VkMemoryMapFlags ags,
= 0
void** ppData);
VkResult vkFlushMappedMemoryRanges(
VkDevice device,
uint32_t memoryRangeCount,
const VkMappedMemoryRange* pMemoryRanges);
VkResult vkInvalidateMappedMemoryRanges(
VkDevice device,
uint32_t memoryRangeCount,
const VkMappedMemoryRange* pMemoryRanges);
typedef struct VkMappedMemoryRange {
VkStructureType sType; const void* pNext;
VkDeviceMemory memory;
VkDeviceSize oset;
VkDeviceSize size;
} VkMappedMemoryRange;
void vkUnmapMemory(
VkDevice device,
VkDeviceMemory memory);
Lazily Allocated Memory [10.2.2]
If the memory object is allocated from a heap with the
VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT bit set,
that object’s backing memory may be provided by the
implementaon lazily.
void vkGetDeviceMemoryCommitment(
VkDevice device,
VkDeviceMemory memory,
VkDeviceSize* pCommiedMemoryInBytes);
Peer Memory Features [10.2.4]
void vkGetDeviceGroupPeerMemoryFeatures(
VkDevice device, uint32_t heapIndex,
uint32_t localDeviceIndex, uint32_t remoteDeviceIndex,
VkPeerMemoryFeatureFlags* pPeerMemoryFeatures);
pPeerMemoryFeatures: VK_PEER_MEMORY_FEATURE_X
where X is COPY_SRC_BIT, COPY_DST_BIT,
GENERIC_SRC_BIT, GENERIC_DST_BIT
Pipelines (connued)
typedef struct VkVertexInputAributeDescripon {
uint32_t locaon;
uint32_t binding;
VkFormat format;
P.13
uint32_t oset;
} VkVertexInputAributeDescripon;
typedef struct VkPipelineInputAssemblyStateCreateInfo {
VkStructureType sType;
const void* pNext;
VkPipelineInputAssemblyStateCreateFlags ags;
= 0
VkPrimiveTopology topology;
VkBool32 primiveRestartEnable;
} VkPipelineInputAssemblyStateCreateInfo;
topology
: VK_PRIMITIVE_TOPOLOGY_X where X is
POINT_LIST, LINE_LIST, LINE_STRIP, TRIANGLE_LIST,
TRIANGLE_STRIP, TRIANGLE_FAN,
LINE_{LIST, STRIP}_WITH_ADJACENCY,
TRIANGLE_{LIST, STRIP}_WITH_ADJACENCY, PATCH_LIST
typedef struct VkPipelineTessellaonStateCreateInfo {
VkStructureType sType;
const void* pNext;
VkPipelineTessellaonStateCreateFlags ags;
= 0
uint32_t patchControlPoints;
} VkPipelineTessellaonStateCreateInfo;
pNext may point to structs:
VkPipelineTessellaonDomainOriginStateCreateInfo
P.15
typedef struct VkPipelineViewportStateCreateInfo {
VkStructureType sType;
const void* pNext;
VkPipelineViewportStateCreateFlags ags;
= 0
uint32_t viewportCount;
const VkViewport* pViewports;
P.15
uint32_t scissorCount;
const VkRect2D* pScissors;
P.15
} VkPipelineViewportStateCreateInfo;
typedef struct VkPipelineRasterizaonStateCreateInfo {
VkStructureType sType;
const void* pNext;
VkPipelineRasterizaonStateCreateFlags ags;
= 0
VkBool32 depthClampEnable;
VkBool32 rasterizerDiscardEnable;
VkPolygonMode polygonMode;
VkCullModeFlags cullMode;
VkFrontFace frontFace;
VkBool32 depthBiasEnable;
oat depthBiasConstantFactor;
oat depthBiasClamp;
oat depthBiasSlopeFactor;
oat lineWidth;
} VkPipelineRasterizaonStateCreateInfo;
polygonMode: VK_POLYGON_MODE_{FILL, LINE, POINT}
cullMode: VK_CULL_MODE_X where X is NONE, FRONT_BIT,
BACK_BIT, FRONT_AND_BACK
frontFace: VK_FRONT_FACE_[COUNTER_]CLOCKWISE
typedef struct VkPipelineMulsampleStateCreateInfo {
VkStructureType sType;
const void* pNext;
VkPipelineMulsampleStateCreateFlags ags;
= 0
VkSampleCountFlagBits rasterizaonSamples;
P.15
VkBool32 sampleShadingEnable;
oat minSampleShading;
const VkSampleMask* pSampleMask;
VkBool32 alphaToCoverageEnable;
VkBool32 alphaToOneEnable;
} VkPipelineMulsampleStateCreateInfo;
typedef struct VkPipelineDepthStencilStateCreateInfo {
VkStructureType sType;
const void* pNext;
VkPipelineDepthStencilStateCreateFlags ags;
= 0
VkBool32 depthTestEnable;
VkBool32 depthWriteEnable;
VkCompareOp depthCompareOp;
P.12
VkBool32 depthBoundsTestEnable;
VkBool32 stencilTestEnable;
VkStencilOpState front;
VkStencilOpState back;
oat minDepthBounds;
oat maxDepthBounds;
} VkPipelineDepthStencilStateCreateInfo;
typedef struct VkStencilOpState {
VkStencilOp failOp;
VkStencilOp passOp;
VkStencilOp depthFailOp;
VkCompareOp compareOp;
P.12
uint32_t compareMask;
uint32_t writeMask;
uint32_t reference;
} VkStencilOpState;
enum VkStencilOp: VK_STENCIL_OP_X where X is KEEP,
ZERO, REPLACE, INCREMENT_AND_{CLAMP, WRAP},
INVERT, DECREMENT_AND_{CLAMP, WRAP}
typedef struct VkPipelineColorBlendStateCreateInfo {
VkStructureType sType;
const void* pNext;
VkPipelineColorBlendStateCreateFlags ags;
= 0
VkBool32 logicOpEnable;
VkLogicOp logicOp;
uint32_t aachmentCount;
const VkPipelineColorBlendAachmentState*
pAachments;
oat blendConstants[4];
} VkPipelineColorBlendStateCreateInfo;
logicOp: VK_LOGIC_OP_X where X is CLEAR, AND,
AND_REVERSE, COPY, AND_INVERTED, NO_OP, XOR, OR,
NOR, EQUIVALENT, INVERT, OR_REVERSE,
COPY_INVERTED, OR_INVERTED, NAND, SET
blendOp: VK_BLEND_OP_X where X is ADD, SUBTRACT,
REVERSE_SUBTRACT, MIN, MAX
colorWriteMask
: VK_COLOR_COMPONENT_X where X is
R_BIT, G_BIT, B_BIT, A_BIT
typedef struct VkPipelineColorBlendAachmentState {
VkBool32 blendEnable;
VkBlendFactor srcColorBlendFactor;
VkBlendFactor dstColorBlendFactor;
VkBlendOp colorBlendOp;
P.12
VkBlendFactor srcAlphaBlendFactor;
VkBlendFactor dstAlphaBlendFactor;
VkBlendOp alphaBlendOp;
P.12
VkColorComponentFlags colorWriteMask;
} VkPipelineColorBlendAachmentState;
enum VkBlendFactor
: VK_BLEND_FACTOR_X where X is
ZERO, ONE, SRC_ALPHA_SATURATE,
[ONE_MINUS_]SRC_COLOR, [ONE_MINUS_]DST_COLOR,
[ONE_MINUS_]SRC_ALPHA, [ONE_MINUS_]DST_ALPHA,
[ONE_MINUS_]CONSTANT_COLOR,
[ONE_MINUS_]CONSTANT_ALPHA,
[ONE_MINUS_]SRC1_COLOR,
[ONE_MINUS_]SRC1_ALPHA
colorWriteMask:
VK_COLOR_COMPONENT_X_BIT where X is R, G, B, A
typedef struct VkPipelineDynamicStateCreateInfo {
VkStructureType sType;
const void* pNext;
VkPipelineDynamicStateCreateFlags ags;
= 0
uint32_t dynamicStateCount;
const VkDynamicState* pDynamicStates;
} VkPipelineDynamicStateCreateInfo;
pDynamicStates: Array of VK_DYNAMIC_STATE_X
where X is VIEWPORT, SCISSOR,
LINE_WIDTH, DEPTH_BIAS, BLEND_CONSTANTS,
DEPTH_BOUNDS, STENCIL_REFERENCE,
STENCIL_COMPARE_MASK, STENCIL_WRITE_MASK
Pipeline Destrucon [9.3]
void vkDestroyPipeline(
VkDevice device, VkPipeline pipeline,
const VkAllocaonCallbacks* pAllocator);
P.12
Pipeline Cache [9.6]
Pipeline cache objects allow the result of pipeline construcon
to be reused between pipelines and between runs of an
applicaon.
VkResult vkCreatePipelineCache(VkDevice device,
const VkPipelineCacheCreateInfo* pCreateInfo,
const VkAllocaonCallbacks* pAllocator,
P.12
VkPipelineCache* pPipelineCache);
typedef struct VkPipelineCacheCreateInfo {
VkStructureType sType;
const void* pNext;
VkPipelineCacheCreateFlags ags;
= 0
size_t inialDataSize;
const void* pInialData;
} VkPipelineCacheCreateInfo;
VkResult vkMergePipelineCaches(VkDevice device,
VkPipelineCache dstCache, uint32_t srcCacheCount,
const VkPipelineCache* pSrcCaches);
VkResult vkGetPipelineCacheData(VkDevice device,
VkPipelineCache pipelineCache,
size_t* pDataSize, void* pData);
void vkDestroyPipelineCache(VkDevice device,
VkPipelineCache pipelineCache,
const VkAllocaonCallbacks* pAllocator);
P.12
Pipeline Binding [9.8]
void vkCmdBindPipeline(
VkCommandBuer commandBuer,
VkPipelineBindPoint pipelineBindPoint,
P.1315
VkPipeline pipeline);

www.khronos.org/vulkan©2018 Khronos Group - Rev. 0318
Vulkan 1.1 Quick Reference Page 5
Resource Creaon [11]
Buers [11.1]
Buers represent linear arrays of data which are used for various
purposes by binding them to a graphics or compute pipeline via
descriptor sets or via certain commands, or by directly specifying
them as parameters to certain commands.
VkResult vkCreateBuer(
VkDevice device,
const VkBuerCreateInfo* pCreateInfo,
const VkAllocaonCallbacks* pAllocator,
P.12
VkBuer* pBuer);
typedef struct VkBuerCreateInfo {
VkStructureType sType;
const void* pNext;
VkBuerCreateFlags ags;
VkDeviceSize size;
VkBuerUsageFlags usage;
P.12
VkSharingMode sharingMode;
P.15
uint32_t queueFamilyIndexCount;
const uint32_t* pQueueFamilyIndices;
} VkBuerCreateInfo;
ags:
VK_BUFFER_CREATE_SPARSE_X_BIT where X is
ALIASED, BINDING, PROTECTED, RESIDENCY
pNext may point to struct:
VkExternalMemoryBuerCreateInfo
P.12
void vkDestroyBuer(
VkDevice device,
VkBuer buer,
const VkAllocaonCallbacks* pAllocator);
P.12
Buer Views [11.2]
A buer view represents a conguous range of a buer and a
specic format to be used to interpret the data.
VkResult vkCreateBuerView(
VkDevice device,
const VkBuerViewCreateInfo* pCreateInfo,
const VkAllocaonCallbacks* pAllocator,
P.12
VkBuerView* pView);
typedef struct VkBuerViewCreateInfo {
VkStructureType sType;
const void* pNext;
VkBuerViewCreateFlags ags;
= 0
VkBuer buer;
VkFormat format;
P.13
VkDeviceSize oset;
VkDeviceSize range;
} VkBuerViewCreateInfo;
void vkDestroyBuerView(
VkDevice device,
VkBuerView buerView,
const VkAllocaonCallbacks* pAllocator);
P.12
Images [11.3]
Images represent muldimensional (up to 3) arrays of data which
can be used for various purposes by binding them to the graphics
or compute pipeline via descriptor sets, or by directly specifying
them as parameters to certain commands.
VkResult vkCreateImage(
VkDevice device,
const VkImageCreateInfo* pCreateInfo,
const VkAllocaonCallbacks* pAllocator,
P.12
VkImage* pImage);
typedef struct VkImageCreateInfo {
VkStructureType sType;
const void* pNext;
VkImageCreateFlags ags;
P.13
VkImageType imageType;
P.13
VkFormat format;
P.13
VkExtent3D extent;
PP.12
uint32_t mipLevels;
uint32_t arrayLayers;
VkSampleCountFlagBits samples;
P.15
VkImageTiling ling;
P.13
VkImageUsageFlags usage;
P.13
VkSharingMode sharingMode;
P.15
uint32_t queueFamilyIndexCount;
const uint32_t* pQueueFamilyIndices;
VkImageLayout inialLayout;
P.13
} VkImageCreateInfo;
pNext may point to struct:
VkExternalMemoryImageCreateInfo
P.P.13
typedef struct VkImageSwapchainCreateInfoKHR {
VkStructureType sType;
const void* pNext;
VkSwapchainKHR swapchain;
} VkImageSwapchainCreateInfoKHR;
void vkGetImageSubresourceLayout(
VkDevice device,
VkImage image,
const VkImageSubresource* pSubresource,
VkSubresourceLayout* pLayout);
typedef struct VkImageSubresource {
VkImageAspectFlags aspectMask;
P.13
uint32_t mipLevel;
uint32_t arrayLayer;
} VkImageSubresource;
Connued on next page >
Vulkan Pipeline Diagram [9]
Some Vulkan commands specify geometric
objects to be drawn or computaonal work to be
performed, while others specify state controlling
how objects are handled by the various pipeline
stages, or control data transfer between memory
organized as images and buers. Commands are
eecvely sent through a processing pipeline,
either a graphics pipeline or a compute pipeline.
The heavy black arrows in this illustraon show
the Vulkan graphics and compute pipelines and
indicate data ow
Fixed funcon stage
Programmable stage
Buer
Image
Constants

www.khronos.org/vulkan
©2018 Khronos Group - Rev. 0318
Vulkan 1.1 Quick Reference Page 6
Resource Descriptors
[13]
A descriptor is an opaque data structure represenng a
shader resource such as a buer view, image view, sampler, or
combined image sampler.
Descriptor Set Layout [13.2.1]
VkResult vkCreateDescriptorSetLayout(
VkDevice device,
const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
P.12
const VkAllocaonCallbacks* pAllocator,
P.12
VkDescriptorSetLayout* pSetLayout);
void vkGetDescriptorSetLayoutSupport(
VkDevice device,
const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
P.1512
VkDescriptorSetLayoutSupport* pSupport);
typedef struct VkDescriptorSetLayoutSupport {
VkStructureType sType; void* pNext;
VkBool32 supported;
} VkDescriptorSetLayoutSupport;
void vkDestroyDescriptorSetLayout(
VkDevice device,
VkDescriptorSetLayout descriptorSetLayout,,
const VkAllocaonCallbacks* pAllocator);
P.12
Pipeline Layouts [13.2.2]
VkResult vkCreatePipelineLayout(
VkDevice device,
const VkPipelineLayoutCreateInfo* pCreateInfo,
const VkAllocaonCallbacks* pAllocator,
P.12
VkPipelineLayout* pPipelineLayout);
typedef struct VkPipelineLayoutCreateInfo {
VkStructureType sType;
const void* pNext;
VkPipelineLayoutCreateFlags ags;
= 0
uint32_t setLayoutCount;
const VkDescriptorSetLayout* pSetLayouts;
uint32_t pushConstantRangeCount;
const VkPushConstantRange* pPushConstantRanges;
} VkPipelineLayoutCreateInfo;
typedef struct VkPushConstantRange {
VkShaderStageFlags stageFlags;
P.15
uint32_t oset;
uint32_t size;
} VkPushConstantRange;
void vkDestroyPipelineLayout(
VkDevice device,
VkPipelineLayout pipelineLayout,
const VkAllocaonCallbacks* pAllocator);
P.12
Allocaon of Descriptor Sets [13.2.3]
VkResult vkCreateDescriptorPool(
VkDevice device,
const VkDescriptorPoolCreateInfo* pCreateInfo,
const VkAllocaonCallbacks* pAllocator,
P.12
VkDescriptorPool* pDescriptorPool);
Connued on next page >
Samplers
[12]
VkSampler objects encapsulate the state of an image sampler
which is used by the implementaon to read image data and
apply ltering and other transformaons for the shader.
VkResult vkCreateSampler(
VkDevice device,
const VkSamplerCreateInfo* pCreateInfo,
const VkAllocaonCallbacks *pAllocator,
P.12
VkSampler *pSampler);
typedef struct VkSamplerCreateInfo {
VkStructureType sType; const void *pNext;
VkSamplerCreateFlags ags;
= 0
VkFilter magFilter; VkFilter minFilter;
VkSamplerMipmapMode mipmapMode;
VkSamplerAddressMode addressModeU;
VkSamplerAddressMode addressModeV;
VkSamplerAddressMode addressModeW;
oat mipLodBias;
VkBool32 anisotropyEnable;
oat maxAnisotropy;
VkBool32 compareEnable;
VkCompareOp compareOp;
P.12
oat minLod; oat maxLod;
VkBorderColor borderColor;
VkBool32 unnormalizedCoordinates;
} VkSamplerCreateInfo;
magFilter, minFilter: VK_FILTER_NEAREST,
VK_FILTER_LINEAR
mipmapMode:
VK_SAMPLER_MIPMAP_MODE_{NEAREST, LINEAR}
borderColor: VK_BORDER_COLOR_{FLOAT, INT}_X
where X is TRANSPARENT_BLACK, OPAQUE_BLACK,
OPAQUE_WHITE
addressMode{U, V, W}:
VK_SAMPLER_ADDRESS_MODE_X where X is REPEAT,
MIRRORED_REPEAT, MIRROR_CLAMP_TO_EDGE,
CLAMP_TO_EDGE, CLAMP_TO_BORDER
pNext may point to structs:
VkSamplerYcbcrConversionInfo
P.15
void vkDestroySampler(
VkDevice device,
VkSampler sampler,
const VkAllocaonCallbacks *pAllocator);
P.12
Sampler Y’CBCR Conversion [12.1]
VkResult vkCreateSamplerYcbcrConversion(
VkDevice device,
const VkSamplerYcbcrConversionCreateInfo*
pCreateInfo,
const VkAllocaonCallbacks* pAllocator,
P.12
VkSamplerYcbcrConversion* pYcbcrConversion);
typedef struct VkSamplerYcbcrConversionCreateInfo {
VkStructureType sType;
const void* pNext;
VkFormat format;
P.13
VkSamplerYcbcrModelConversion ycbcrModel;
VkSamplerYcbcrRange ycbcrRange;
VkComponentMapping components;
VkChromaLocaon xChromaOset;
VkChromaLocaon yChromaOset;
VkFilter chromaFilter;
VkBool32 forceExplicitReconstrucon;
} VkSamplerYcbcrConversionCreateInfo;
VkSamplerYcbcrModelConversion:
VK_SAMPLER_YCBCR_MODEL_CONVERSION_X where X
is {RGB, YCBCR}_IDENTITY, YCBCR_{709, 601, 2020}
VkSamplerYcbcrRange:
VK_SAMPLER_YCBCR_RANGE_ITU_{FULL, NARROW}
VkChromaLocaon:
VK_CHROMA_LOCATION_{COSITED_EVEN, MIDPOINT}
VkFilter:
VK_FILTER_{NEAREST, LINEAR}
void vkDestroySamplerYcbcrConversion(VkDevice device,
VkSamplerYcbcrConversion ycbcrConversion,
const VkAllocaonCallbacks* pAllocator);
P.12
Resource Creaon (connued)
typedef struct VkSubresourceLayout {
VkDeviceSize oset;
VkDeviceSize size;
VkDeviceSize rowPitch;
VkDeviceSize arrayPitch;
VkDeviceSize depthPitch;
} VkSubresourceLayout;
void vkDestroyImage(
VkDevice device, VkImage image,
const VkAllocaonCallbacks* pAllocator);
P.12
Image Views [11.5]
Image objects are not directly accessed by pipeline shaders for
reading or wring image data. Instead, image views represenng
conguous ranges of the image subresources and containing
addional metadata are used for that purpose.
VkResult vkCreateImageView(
VkDevice device,
const VkImageViewCreateInfo* pCreateInfo,
const VkAllocaonCallbacks* pAllocator,
P.12
VkImageView* pView);
typedef struct VkImageViewCreateInfo {
VkStructureType sType; const void* pNext;
VkImageViewCreateFlags ags;
= 0
VkImage image;
VkImageViewType viewType;
VkFormat format;
P.13
VkComponentMapping components;
VkImageSubresourceRange subresourceRange;
P.13
} VkImageViewCreateInfo;
viewType: VK_IMAGE_VIEW_TYPE_X where X is
1D, 2D, 3D,
CUBE, 1D_ARRAY, 2D_ARRAY, CUBE_ARRAY
pNext may point to structs:
VkImageViewUsageCreateInfo
P.13
VkSamplerYcbcrConversionInfo
P.15
typedef struct VkComponentMapping {
VkComponentSwizzle r;
VkComponentSwizzle g;
VkComponentSwizzle b;
VkComponentSwizzle a;
} VkComponentMapping;
enum VkComponentSwizzle: VK_COMPONENT_SWIZZLE_X
where X is
IDENTITY, ZERO, ONE, R, G, B, A
void vkDestroyImageView(VkDevice device,
VkImageView imageView,
const VkAllocaonCallbacks* pAllocator);
P.12
Resource Memory Associaon [11.6]
Resources are inially created as virtual allocaons with no
backing memory. Device memory is allocated separately and
then associated with the resource.
void vkGetBuerMemoryRequirements(
VkDevice device,
VkBuer buer,
VkMemoryRequirements* pMemoryRequirements);
P.13
void vkGetBuerMemoryRequirements2(VkDevice device,
const VkBuerMemoryRequirementsInfo2* pInfo,
VkMemoryRequirements2* pMemoryRequirements);
P.13
typedef struct VkBuerMemoryRequirementsInfo2 {
VkStructureType sType;
const void* pNext;
VkBuer buer;
} VkBuerMemoryRequirementsInfo2;
void vkGetImageMemoryRequirements(
VkDevice device, VkImage image,
VkMemoryRequirements* pMemoryRequirements);
P.13
void vkGetImageMemoryRequirements2(VkDevice device,
const VkImageMemoryRequirementsInfo2* pInfo,
VkMemoryRequirements2* pMemoryRequirements);
P.13
typedef struct VkImageMemoryRequirementsInfo2 {
VkStructureType sType; const void* pNext;
VkImage image;
} VkImageMemoryRequirementsInfo2;
pNext may point to struct:
VkImagePlaneMemoryRequirementsInfo
P.13
VkResult vkBindBuerMemory(VkDevice device,
VkBuer buer, VkDeviceMemory memory,
VkDeviceSize memoryOset);
VkResult vkBindBuerMemory2(VkDevice device,
uint32_t bindInfoCount,
const VkBindBuerMemoryInfo* pBindInfos);
typedef struct VkBindBuerMemoryInfo {
VkStructureType sType;
const void* pNext;
VkBuer buer;
VkDeviceMemory memory;
VkDeviceSize memoryOset;
} VkBindBuerMemoryInfo;
pNext may point to struct:
VkBindBuerMemoryDeviceGroupInfo
P.12
VkResult vkBindImageMemory(VkDevice device,
VkImage image, VkDeviceMemory memory,
VkDeviceSize memoryOset);
VkResult vkBindImageMemory2(VkDevice device,
uint32_t bindInfoCount,
const VkBindImageMemoryInfo* pBindInfos);
typedef struct VkBindImageMemoryInfo {
VkStructureType sType;
const void* pNext;
VkImage image;
VkDeviceMemory memory;
VkDeviceSize memoryOset;
} VkBindImageMemoryInfo;
pNext may point to structs:
VkBindImageMemoryDeviceGroupInfo
P.12
VkBindImagePlaneMemoryInfo
P.12

www.khronos.org/vulkan©2018 Khronos Group - Rev. 0318
Vulkan 1.1 Quick Reference Page 7
Queries [16]
Query Pools [16.1]
VkResult vkCreateQueryPool(
VkDevice device,
const VkQueryPoolCreateInfo* pCreateInfo,
const VkAllocaonCallbacks* pAllocator,
P.12
VkQueryPool* pQueryPool);
typedef struct VkQueryPoolCreateInfo {
VkStructureType sType;
const void* pNext;
VkQueryPoolCreateFlags ags;
= 0
VkQueryType queryType;
uint32_t queryCount;
VkQueryPipelineStascFlags pipelineStascs;
P.15
} VkQueryPoolCreateInfo;
queryType: VK_QUERY_TYPE_OCCLUSION,
VK_QUERY_TYPE_PIPELINE_STATISTICS,
VK_QUERY_TYPE_TIMESTAMP
void vkDestroyQueryPool(
VkDevice device,
VkQueryPool queryPool,
const VkAllocaonCallbacks* pAllocator);
P.12
Query Operaon [16.2]
void vkCmdResetQueryPool(
VkCommandBuer commandBuer,
VkQueryPool queryPool,
uint32_t rstQuery,
uint32_t queryCount);
void vkCmdBeginQuery(
VkCommandBuer commandBuer,
VkQueryPool queryPool,
uint32_t entry,
VkQueryControlFlags ags);
ags: VK_QUERY_CONTROL_PRECISE_BIT
void vkCmdEndQuery(
VkCommandBuer commandBuer,
VkQueryPool queryPool,
uint32_t query);
VkResult vkGetQueryPoolResults(
VkDevice device,
VkQueryPool queryPool,
uint32_t rstQuery,
uint32_t queryCount,
size_t dataSize,
void* pData,
VkDeviceSize stride,
VkQueryResultFlags ags);
ags: VK_QUERY_RESULT_X_BIT where X is
64, WAIT, WITH_AVAILABILITY, PARTIAL
void vkCmdCopyQueryPoolResults(
VkCommandBuer commandBuer,
VkQueryPool queryPool,
uint32_t rstQuery,
uint32_t queryCount,
VkBuer dstBuer,
VkDeviceSize dstOset,
VkDeviceSize stride,
VkQueryResultFlags ags);
ags: VK_QUERY_RESULT_X_BIT where X is
64, WAIT, WITH_AVAILABILITY, PARTIAL
Timestamp Queries [16.5]
void vkCmdWriteTimestamp(
VkCommandBuer commandBuer,
VkPipelineStageFlagBits pipelineStage,
P.15
VkQueryPool queryPool,
uint32_t query);
Resource Descriptors (connued)
typedef struct VkDescriptorPoolCreateInfo {
VkStructureType sType;
const void* pNext;
VkDescriptorPoolCreateFlags ags;
uint32_t maxSets;
uint32_t poolSizeCount;
const VkDescriptorPoolSize* pPoolSizes;
} VkDescriptorPoolCreateInfo;
ags: VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_-
SET_BIT
typedef struct VkDescriptorPoolSize {
VkDescriptorType type;
P.12
uint32_t descriptorCount;
} VkDescriptorPoolSize;
void vkDestroyDescriptorPool(
VkDevice device,
VkDescriptorPool descriptorPool,
const VkAllocaonCallbacks* pAllocator);
P.12
VkResult vkAllocateDescriptorSets(
VkDevice device,
const VkDescriptorSetAllocateInfo* pAllocateInfo,
VkDescriptorSet* pDescriptorSets);
typedef struct VkDescriptorSetAllocateInfo {
VkStructureType sType; const void* pNext;
VkDescriptorPool descriptorPool;
uint32_t descriptorSetCount;
const VkDescriptorSetLayout* pSetLayouts;
} VkDescriptorSetAllocateInfo;
VkResult vkFreeDescriptorSets(
VkDevice device,
VkDescriptorPool descriptorPool,
uint32_t descriptorSetCount,
const VkDescriptorSet* pDescriptorSets);
VkResult vkResetDescriptorPool(
VkDevice device,
VkDescriptorPool descriptorPool,
VkDescriptorPoolResetFlags ags);
Descriptor Set Updates [13.2.4]
void vkUpdateDescriptorSets(
VkDevice device,
uint32_t descriptorWriteCount,
const VkWriteDescriptorSet* pDescriptorWrites,
uint32_t descriptorCopyCount,
const VkCopyDescriptorSet* pDescriptorCopies);
typedef struct VkWriteDescriptorSet {
VkStructureType sType; const void* pNext;
VkDescriptorSet dstSet;
uint32_t dstBinding;
uint32_t dstArrayElement;
uint32_t descriptorCount;
VkDescriptorType descriptorType;
P.12
const VkDescriptorImageInfo* pImageInfo;
const VkDescriptorBuerInfo* pBuerInfo;
const VkBuerView* pTexelBuerView;
} VkWriteDescriptorSet;
typedef struct VkDescriptorImageInfo {
VkSampler sampler;
VkImageView imageView;
VkImageLayout imageLayout;
P.13
} VkDescriptorImageInfo;
typedef struct VkDescriptorBuerInfo {
VkBuer buer;
VkDeviceSize oset;
VkDeviceSize range;
} VkDescriptorBuerInfo;
typedef struct VkCopyDescriptorSet {
VkStructureType sType; const void* pNext;
VkDescriptorSet srcSet;
uint32_t srcBinding;
uint32_t srcArrayElement;
VkDescriptorSet dstSet;
uint32_t dstBinding;
uint32_t dstArrayElement;
uint32_t descriptorCount;
} VkCopyDescriptorSet;
Descriptor Set Updates with Templates [13.2.6]
VkResult vkCreateDescriptorUpdateTemplate(
VkDevice device,
const VkDescriptorUpdateTemplateCreateInfo*
pCreateInfo,
const VkAllocaonCallbacks* pAllocator,
P.12
VkDescriptorUpdateTemplate*
pDescriptorUpdateTemplate);
typedef struct VkDescriptorUpdateTemplateCreateInfo {
VkStructureType sType;
void* pNext;
VkDescriptorUpdateTemplateCreateFlags ags;
= 0
uint32_t descriptorUpdateEntryCount;
const VkDescriptorUpdateTemplateEntry*
pDescriptorUpdateEntries;
VkDescriptorUpdateTemplateType templateType;
VkDescriptorSetLayout descriptorSetLayout;
VkPipelineBindPoint pipelineBindPoint;
P.1315
VkPipelineLayout pipelineLayout;
uint32_t set;
= 0
} VkDescriptorUpdateTemplateCreateInfo;
VKPipelineBindPoint: VK_PIPELINE_BIND_POINT_X
where X is GRAPHICS, COMPUTE
templateType: VK_DESCRIPTOR_UPDATE_TEMPLATE_-
TYPE_DESCRIPTOR_SET
typedef struct VkDescriptorUpdateTemplateEntry {
uint32_t dstBinding;
uint32_t dstArrayElement;
uint32_t descriptorCount;
VkDescriptorType descriptorType;
P.12
size_t oset;
size_t stride;
} VkDescriptorUpdateTemplateEntry;
void vkDestroyDescriptorUpdateTemplate(
VkDevice device,
VkDescriptorUpdateTemplate
descriptorUpdateTemplate,
const VkAllocaonCallbacks* pAllocator);
P.12
void vkUpdateDescriptorSetWithTemplate(
VkDevice device,
VkDescriptorSet descriptorSet,
VkDescriptorUpdateTemplate
descriptorUpdateTemplate,
const void* pData);
Descriptor Set Binding [13.2.7]
void vkCmdBindDescriptorSets(
VkCommandBuer commandBuer,
VkPipelineBindPoint pipelineBindPoint,
P.1315
VkPipelineLayout layout,
P.15
uint32_t rstSet,
uint32_t descriptorSetCount,
const VkDescriptorSet* pDescriptorSets,
uint32_t dynamicOsetCount,
const uint32_t* pDynamicOsets);
Push Constant Updates [13.2.8]
The pipeline layout denes shader push constants which
are updated via Vulkan commands rather than via writes to
memory or copy commands.
void vkCmdPushConstants(
VkCommandBuer commandBuer,
VkPipelineLayout layout,
P.15
VkShaderStageFlags stageFlags,
P.15
uint32_t oset,
uint32_t size,
const void* pValues);
Clear Commands [17]
Outside a Render Pass Instance [17.1]
void vkCmdClearColorImage(
VkCommandBuer commandBuer,
VkImage image,
VkImageLayout imageLayout,
P.P.13
const VkClearColorValue* pColor,
P.12
uint32_t rangeCount,
const VkImageSubresourceRange* pRanges);
P.13
imageLayout:
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
VK_IMAGE_LAYOUT_GENERAL.
VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR
void vkCmdClearDepthStencilImage(
VkCommandBuer commandBuer,
VkImage image,
VkImageLayout imageLayout,
P.P.13
const VkClearDepthStencilValue* pDepthStencil,
P.12
uint32_t rangeCount,
const VkImageSubresourceRange* pRanges);
P.13
imageLayout:
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
VK_IMAGE_LAYOUT_GENERAL
Inside a Render Pass Instance [17.2]
void vkCmdClearAachments(
VkCommandBuer commandBuer,
uint32_t aachmentCount,
const VkClearAachment* pAachments,
uint32_t rectCount,
const VkClearRect* pRects);
typedef struct VkClearRect {
VkRect2D rect;
P.15
uint32_t baseArrayLayer;
uint32_t layerCount;
} VkClearRect;
typedef struct VkClearAachment {
VkImageAspectFlags aspectMask;
P.13
uint32_t colorAachment;
VkClearValue clearValue;
P.12
} VkClearAachment;
Connued on next page >

www.khronos.org/vulkan
©2018 Khronos Group - Rev. 0318
Vulkan 1.1 Quick Reference Page 8
Rasterizaon [24]
Basic Line Segment Rasterizaon [24.6]
void vkCmdSetLineWidth(
VkCommandBuer commandBuer,
oat lineWidth);
Depth Bias [24.7.3]
void vkCmdSetDepthBias(
VkCommandBuer commandBuer,
oat depthBiasConstantFactor,
oat depthBiasClamp,
oat depthBiasSlopeFactor);
Drawing Commands [19]
void vkCmdBindIndexBuer(
VkCommandBuer commandBuer,
VkBuer buer,
VkDeviceSize oset,
VkIndexType indexType);
indexType: VK_INDEX_TYPE_UINT{16, 32}
void vkCmdDraw(
VkCommandBuer commandBuer,
uint32_t vertexCount,
uint32_t instanceCount,
uint32_t rstVertex,
uint32_t rstInstance);
void vkCmdDrawIndexed(
VkCommandBuer commandBuer,
uint32_t indexCount,
uint32_t instanceCount,
uint32_t rstIndex,
int32_t vertexOset,
uint32_t rstInstance);
void vkCmdDrawIndirect(
VkCommandBuer commandBuer,
VkBuer buer,
VkDeviceSize oset,
uint32_t drawCount,
uint32_t stride);
typedef struct VkDrawIndirectCommand {
uint32_t vertexCount;
uint32_t instanceCount;
uint32_t rstVertex;
uint32_t rstInstance;
} VkDrawIndirectCommand;
void vkCmdDrawIndexedIndirect(
VkCommandBuer commandBuer,
VkBuer buer, VkDeviceSize oset,
uint32_t drawCount, uint32_t stride);
typedef struct VkDrawIndexedIndirectCommand {
uint32_t indexCount; uint32_t instanceCount;
uint32_t rstIndex;
int32_t vertexOset;
uint32_t rstInstance;
} VkDrawIndexedIndirectCommand;
Sparse Resources [28]
Sparse Image Format Properes [28.7.3]
void vkGetPhysicalDeviceSparseImageFormatProperes(
VkPhysicalDevice physicalDevice,
VkFormat format,
P.13
VkImageType type,
P.13
VkSampleCountFlagBits samples,
P.15
VkImageUsageFlags usage,
P.13
VkImageTiling ling,
P.13
uint32_t* pPropertyCount,
VkSparseImageFormatProperes* pProperes);
typedef struct VkSparseImageFormatProperes {
VkImageAspectFlags aspectMask;
P.13
VkExtent3D imageGranularity;
P12
VkSparseImageFormatFlags ags;
} VkSparseImageFormatProperes;
ags: VK_SPARSE_IMAGE_FORMAT_X where X is
SINGLE_MIPTAIL_BIT, ALIGNED_MIP_SIZE_BIT,
NONSTANDARD_BLOCK_SIZE_BIT
void vkGetPhysicalDeviceSparseImageFormatProperes2(
VkPhysicalDevice physicalDevice,
const VkPhysicalDeviceSparseImageFormatInfo2*
pFormatInfo,
uint32_t* pPropertyCount,
VkSparseImageFormatProperes2* pProperes);
typedef struct VkSparseImageFormatProperes2 {
VkStructureType sType;
void* pNext;
VkSparseImageFormatProperes properes;
} VkSparseImageFormatProperes2;
Connued on next page >
Vertex Input Descripon [20.2]
void vkCmdBindVertexBuers(
VkCommandBuer commandBuer,
uint32_t rstBinding, uint32_t bindingCount,
const VkBuer* pBuers,
const VkDeviceSize* pOsets);
Fragment Operaons [25]
Scissor Test [25.2]
void vkCmdSetScissor(
VkCommandBuer commandBuer,
uint32_t rstScissor, uint32_t scissorCount,
const VkRect2D* pScissors);
P.15
Depth Bounds Test [25.8]
void vkCmdSetDepthBounds(
VkCommandBuer commandBuer,
oat minDepthBounds, oat maxDepthBounds);
Stencil Test [25.9]
void vkCmdSetStencilCompareMask(
VkCommandBuer commandBuer,
VkStencilFaceFlags faceMask, uint32_t compareMask);
void vkCmdSetStencilWriteMask(
VkCommandBuer commandBuer,
VkStencilFaceFlags faceMask,
uint32_t writeMask);
void vkCmdSetStencilReference(
VkCommandBuer commandBuer,
VkStencilFaceFlags faceMask,
uint32_t reference);
faceMask: VK_STENCIL_FACE_{FRONT, BACK}_BIT,
VK_STENCIL_FRONT_AND_BACK
Framebuer: Blend Factors [26.1.1]
void vkCmdSetBlendConstants(
VkCommandBuer commandBuer,
const oat blendConstants[4]);
Dispatching Commands [27]
void vkCmdDispatch(
VkCommandBuer commandBuer,
uint32_t groupCountX,
uint32_t groupCountY,
uint32_t groupCountZ);
void vkCmdDispatchIndirect(
VkCommandBuer commandBuer,
VkBuer buer,
VkDeviceSize oset);
typedef struct VkDispatchIndirectCommand {
uint32_t x;
uint32_t y;
uint32_t z;
} VkDispatchIndirectCommand;
void vkCmdDispatchBase(
VkCommandBuer commandBuer,
uint32_t baseGroupX, uint32_t baseGroupY,
uint32_t baseGroupZ, uint32_t groupCountX,
uint32_t groupCountY, uint32_t groupCountZ);
Fixed-Funcon Vertex Postprocessing [23]
Controlling the Viewport [23.5]
void vkCmdSetViewport(
VkCommandBuer commandBuer,
uint32_t rstViewport,
uint32_t viewportCount,
const VkViewport* pViewports);
P.15
Copy Commands [18]
Copying Data Between Buers [18.2]
void vkCmdCopyBuer(
VkCommandBuer commandBuer,
VkBuer srcBuer, VkBuer dstBuer,
uint32_t regionCount,
const VkBuerCopy* pRegions);
typedef struct VkBuerCopy {
VkDeviceSize srcOset; VkDeviceSize dstOset;
VkDeviceSize size;
} VkBuerCopy;
Copying Data Between Images [18.3]
void vkCmdCopyImage(
VkCommandBuer commandBuer,
VkImage srcImage,
VkImageLayout srcImageLayout,
P.13
VkImage dstImage,
VkImageLayout dstImageLayout,
P.13
uint32_t regionCount,
const VkImageCopy* pRegions);
typedef struct VkImageCopy {
VkImageSubresourceLayers srcSubresource;
P.13
VkOset3D srcOset;
P14
VkImageSubresourceLayers dstSubresource;
P.13
VkOset3D dstOset;
P.13
VkExtent3D extent;
P12
} VkImageCopy;
Copying Data Between Buers and Images [18.4]
void vkCmdCopyBuerToImage(
VkCommandBuer commandBuer,
VkBuer srcBuer, VkImage dstImage,
VkImageLayout dstImageLayout,
P.13
uint32_t regionCount,
const VkBuerImageCopy* pRegions);
void vkCmdCopyImageToBuer(
VkCommandBuer commandBuer,
VkImage srcImage,
VkImageLayout srcImageLayout,
P.13
VkBuer dstBuer,
uint32_t regionCount,
const VkBuerImageCopy* pRegions);
typedef struct VkBuerImageCopy {
VkDeviceSize buerOset;
uint32_t buerRowLength;
uint32_t buerImageHeight;
VkImageSubresourceLayers imageSubresource;
P.13
VkOset3D imageOset;
P14
VkExtent3D imageExtent;
P12
} VkBuerImageCopy;
Image Copies With Scaling [18.5]
void vkCmdBlitImage(
VkCommandBuer commandBuer,
VkImage srcImage,
VkImageLayout srcImageLayout,
P.13
VkImage dstImage,
VkImageLayout dstImageLayout,
P.13
uint32_t regionCount,
const VkImageBlit* pRegions,
VkFilter lter);
lter: VK_FILTER_NEAREST, VK_FILTER_LINEAR
typedef struct VkImageBlit {
VkImageSubresourceLayers srcSubresource;
P.13
VkOset3D srcOsets[2];
P14
VkImageSubresourceLayers dstSubresource;
P.13
VkOset3D dstOsets[2];
P.13
} VkImageBlit;
Resolving Mulsample Images [18.6]
void vkCmdResolveImage(
VkCommandBuer commandBuer,
VkImage srcImage,
VkImageLayout srcImageLayout,
P.13
VkImage dstImage,
VkImageLayout dstImageLayout,
P.13
uint32_t regionCount,
const VkImageResolve* pRegions);
typedef struct VkImageResolve {
VkImageSubresourceLayers srcSubresource;
P.13
VkOset3D srcOset;
P14
VkImageSubresourceLayers dstSubresource;
P.13
VkOset3D dstOset;
P14
VkExtent3D extent;
P12
} VkImageResolve;
Clear Commands (connued)
Filling Buers [17.4]
void vkCmdFillBuer(
VkCommandBuer commandBuer,
VkBuer dstBuer, VkDeviceSize dstOset,
VkDeviceSize size, uint32_t data);
Updang Buers [17.5]
void vkCmdUpdateBuer(
VkCommandBuer commandBuer,
VkBuer dstBuer, VkDeviceSize dstOset,
VkDeviceSize dataSize, const void* pData);

www.khronos.org/vulkan©2018 Khronos Group - Rev. 0318
Vulkan 1.1 Quick Reference Page 9
Sparse Resources (connued)
typedef struct VkPhysicalDeviceSparseImageFormatInfo2 {
VkStructureType sType;
const void* pNext;
VkFormat format,
P.13
VkImageType type,
P.13
VkSampleCountFlagBits samples,
P.15
VkImageUsageFlags usage,
P.13
VkImageTiling ling,
P.13
} VkPhysicalDeviceSparseImageFormatInfo2;
Sparse Resource Memory Requirements [28.7.5]
void vkGetImageSparseMemoryRequirements(
VkDevice device,
VkImage image,
uint32_t* pSparseMemoryRequirementCount,
VkSparseImageMemoryRequirements*
pSparseMemoryRequirements);
typedef struct VkSparseImageMemoryRequirements {
VkSparseImageFormatProperes formatProperes;
uint32_t imageMipTailFirstLod;
VkDeviceSize imageMipTailSize;
VkDeviceSize imageMipTailOset;
VkDeviceSize imageMipTailStride;
} VkSparseImageMemoryRequirements;
void vkGetImageSparseMemoryRequirements2(
VkDevice device,
const VkImageSparseMemoryRequirementsInfo2* pInfo,
uint32_t* pSparseMemoryRequirementCount,
VkSparseImageMemoryRequirements2*
pSparseMemoryRequirements);
typedef struct VkImageSparseMemoryRequirementsInfo2 {
VkStructureType sType;
const void* pNext;
VkImage image;
} VkImageSparseMemoryRequirementsInfo2;
typedef struct VkSparseImageMemoryRequirements2 {
VkStructureType sType;
void* pNext;
VkSparseImageMemoryRequirements
memoryRequirements;
} VkSparseImageMemoryRequirements2;
Binding Resource Memory [28.7.6]
typedef struct VkBindSparseInfo {
VkStructureType sType;
const void* pNext;
uint32_t waitSemaphoreCount;
const VkSemaphore* pWaitSemaphores;
uint32_t buerBindCount;
const VkSparseBuerMemoryBindInfo* pBuerBinds;
uint32_t imageOpaqueBindCount;
const VkSparseImageOpaqueMemoryBindInfo*
pImageOpaqueBinds;
uint32_t imageBindCount;
const VkSparseImageMemoryBindInfo* pImageBinds;
uint32_t signalSemaphoreCount;
const VkSemaphore* pSignalSemaphores;
} VkBindSparseInfo;
pNext may point to structs:
VkDeviceGroupBindSparseInfo
P.12
typedef struct VkSparseBuerMemoryBindInfo {
VkBuer buer;
uint32_t bindCount;
const VkSparseMemoryBind* pBinds;
P.15
} VkSparseBuerMemoryBindInfo;
typedef struct VkSparseImageOpaqueMemoryBindInfo {
VkImage image;
uint32_t bindCount;
const VkSparseMemoryBind* pBinds;
P.15
} VkSparseImageOpaqueMemoryBindInfo;
typedef struct VkSparseImageMemoryBindInfo {
VkImage image;
uint32_t bindCount;
const VkSparseImageMemoryBind* pBinds;
} VkSparseImageMemoryBindInfo;
typedef struct VkSparseImageMemoryBind {
VkImageSubresource subresource;
VkOset3D oset;
P14
VkExtent3D extent;
P12
VkDeviceMemory memory;
VkDeviceSize memoryOset;
VkSparseMemoryBindFlags ags;
} VkSparseImageMemoryBind;
ags: VK_SPARSE_MEMORY_BIND_METADATA_BIT
VkResult vkQueueBindSparse(
VkQueue queue,
uint32_t bindInfoCount,
const VkBindSparseInfo* pBindInfo,
VkFence fence);
Window System Integraon (WSI)
[29]
Android Plaorm [29.2.1]
VkResult vkCreateAndroidSurfaceKHR(
VkInstance instance,
const VkAndroidSurfaceCreateInfoKHR* pCreateInfo,
const VkAllocaonCallbacks* pAllocator,
P.12
VkSurfaceKHR* pSurface);
typedef struct VkAndroidSurfaceCreateInfoKHR {
VkStructureType sType;
const void* pNext;
VkAndroidSurfaceCreateFlagsKHR ags;
= 0
struct ANaveWindow* window;
} VkAndroidSurfaceCreateInfoKHR;
Wayland Plaorm [29.2.2]
VkResult vkCreateWaylandSurfaceKHR(
VkInstance instance,
const VkWaylandSurfaceCreateInfoKHR* pCreateInfo,
const VkAllocaonCallbacks* pAllocator,
P.12
VkSurfaceKHR* pSurface);
typedef struct VkWaylandSurfaceCreateInfoKHR {
VkStructureType sType;
const void* pNext;
VkWaylandSurfaceCreateFlagsKHR ags;
= 0
struct wl_display* display;
struct wl_surface* surface;
} VkWaylandSurfaceCreateInfoKHR;
Win32 Plaorm [29.2.3]
VkResult vkCreateWin32SurfaceKHR(
VkInstance instance,
const VkWin32SurfaceCreateInfoKHR* pCreateInfo,
const VkAllocaonCallbacks* pAllocator,
P.12
VkSurfaceKHR* pSurface);
typedef struct VkWin32SurfaceCreateInfoKHR {
VkStructureType sType;
const void* pNext;
VkWin32SurfaceCreateFlagsKHR ags;
= 0
HINSTANCE hinstance;
HWND hwnd;
} VkWin32SurfaceCreateInfoKHR;
XCB Plaorm [29.2.4]
VkResult vkCreateXcbSurfaceKHR(
VkInstance instance,
const VkXcbSurfaceCreateInfoKHR* pCreateInfo,
const VkAllocaonCallbacks* pAllocator,
P.12
VkSurfaceKHR* pSurface);
typedef struct VkXcbSurfaceCreateInfoKHR {
VkStructureType sType;
const void* pNext;
VkXcbSurfaceCreateFlagsKHR ags;
xcb_connecon_t* connecon;
xcb_window_t window;
} VkXcbSurfaceCreateInfoKHR;
Xlib Plaorm [29.2.5]
VkResult vkCreateXlibSurfaceKHR(
VkInstance instance,
const VkXlibSurfaceCreateInfoKHR* pCreateInfo,
const VkAllocaonCallbacks* pAllocator,
P.12
VkSurfaceKHR* pSurface);
typedef struct VkXlibSurfaceCreateInfoKHR {
VkStructureType sType; const void* pNext;
VkXlibSurfaceCreateFlagsKHR ags;
Display* dpy;
Window window;
} VkXlibSurfaceCreateInfoKHR;
Plaorm-Independent Informaon [29.2.6]
void vkDestroySurfaceKHR(
VkInstance instance, VkSurfaceKHR surface,
const VkAllocaonCallbacks* pAllocator);
P.12
Display Enumeraon [29.3.1]
VkResult vkGetPhysicalDeviceDisplayProperesKHR(
VkPhysicalDevice physicalDevice,
uint32_t* pPropertyCount,
VkDisplayProperesKHR* pProperes);
typedef struct VkDisplayProperesKHR {
VkDisplayKHR display;
const char* displayName;
VkExtent2D physicalDimensions;
P12
VkExtent2D physicalResoluon;
P12
VkSurfaceTransformFlagsKHR supportedTransforms;
P.15
VkBool32 planeReorderPossible;
VkBool32 persistentContent;
} VkDisplayProperesKHR;
Display Planes
VkResult vkGetPhysicalDeviceDisplayPlaneProperesKHR(
VkPhysicalDevice physicalDevice,
uint32_t* pPropertyCount,
VkDisplayPlaneProperesKHR* pProperes);
typedef struct VkDisplayPlaneProperesKHR {
VkDisplayKHR currentDisplay;
uint32_t currentStackIndex;
} VkDisplayPlaneProperesKHR;
VkResult vkGetDisplayPlaneSupportedDisplaysKHR(
VkPhysicalDevice physicalDevice,
uint32_t planeIndex,
uint32_t* pDisplayCount,
VkDisplayKHR* pDisplays);
Display Modes
VkResult vkGetDisplayModeProperesKHR(
VkPhysicalDevice physicalDevice,
VkDisplayKHR display,
uint32_t* pPropertyCount,
VkDisplayModeProperesKHR* pProperes);
typedef struct VkDisplayModeProperesKHR {
VkDisplayModeKHR displayMode;
VkDisplayModeParametersKHR parameters;
} VkDisplayModeProperesKHR;
typedef struct VkDisplayModeParametersKHR {
VkExtent2D visibleRegion;
P12
uint32_t refreshRate;
} VkDisplayModeParametersKHR;
VkResult vkCreateDisplayModeKHR(
VkPhysicalDevice physicalDevice,
VkDisplayKHR display,
const VkDisplayModeCreateInfoKHR* pCreateInfo,
const VkAllocaonCallbacks* pAllocator,
P.12
VkDisplayModeKHR* pMode);
typedef struct VkDisplayModeCreateInfoKHR {
VkStructureType sType;
const void* pNext;
VkDisplayModeCreateFlagsKHR ags;
VkDisplayModeParametersKHR parameters;
} VkDisplayModeCreateInfoKHR;
VkResult vkGetDisplayPlaneCapabiliesKHR(
VkPhysicalDevice physicalDevice,
VkDisplayModeKHR mode,
uint32_t planeIndex,
VkDisplayPlaneCapabiliesKHR* pCapabilies);
typedef struct VkDisplayPlaneCapabiliesKHR {
VkDisplayPlaneAlphaFlagsKHR supportedAlpha;
VkOset2D minSrcPosion;
P14
VkOset2D maxSrcPosion;
P14
VkExtent2D minSrcExtent;
P12
VkExtent2D maxSrcExtent;
P12
VkOset2D minDstPosion;
P14
VkOset2D maxDstPosion;
P14
VkExtent2D minDstExtent;
P12
VkExtent2D maxDstExtent;
P12
} VkDisplayPlaneCapabiliesKHR;
Display Surfaces [29.3.2]
VkResult vkCreateDisplayPlaneSurfaceKHR(
VkInstance instance,
const VkDisplaySurfaceCreateInfoKHR* pCreateInfo,
const VkAllocaonCallbacks* pAllocator,
P.12
VkSurfaceKHR* pSurface);
typedef struct VkDisplaySurfaceCreateInfoKHR {
VkStructureType sType;
const void* pNext;
VkDisplaySurfaceCreateFlagsKHR ags;
VkDisplayModeKHR displayMode;
uint32_t planeIndex;
uint32_t planeStackIndex;
VkSurfaceTransformFlagBitsKHR transform;
P.15
oat globalAlpha;
VkDisplayPlaneAlphaFlagBitsKHR alphaMode;
VkExtent2D imageExtent;
P12
} VkDisplaySurfaceCreateInfoKHR;
alphaMode: VK_DISPLAY_PLANE_ALPHA_X_BIT_KHR
where X is OPAQUE, GLOBAL, PER_PIXEL,
PER_PIXEL_PREMULTIPLIED
Connued on next page >

www.khronos.org/vulkan
©2018 Khronos Group - Rev. 0318
Vulkan 1.1 Quick Reference Page 10
Extended Funconality
Layers [30.1]
VkResult vkEnumerateInstanceLayerProperes(
uint32_t* pPropertyCount,
VkLayerProperes* pProperes);
VkResult vkEnumerateDeviceLayerProperes(
VkPhysicalDevice physicalDevice,
uint32_t* pPropertyCount,
VkLayerProperes* pProperes);
typedef struct VkLayerProperes {
char layerName [VK_MAX_EXTENSION_NAME_SIZE];
uint32_t specVersion;
uint32_t implementaonVersion;
char descripon [VK_MAX_DESCRIPTION_SIZE];
} VkLayerProperes;
Extensions [30.2]
VkResult vkEnumerateInstanceExtensionProperes(
const char* pLayerName,
uint32_t* pPropertyCount,
VkExtensionProperes* pProperes);
VkResult vkEnumerateDeviceExtensionProperes(
VkPhysicalDevice physicalDevice,
const char* pLayerName,
uint32_t* pPropertyCount,
VkExtensionProperes* pProperes);
Connued on next page >
WSI (connued)
Querying for WSI Support [29.4]
VkResult vkGetPhysicalDeviceSurfaceSupportKHR(
VkPhysicalDevice physicalDevice,
uint32_t queueFamilyIndex, VkSurfaceKHR surface,
VkBool32* pSupported);
Wayland Plaorm Querying [29.4.2]
VkBool32
vkGetPhysicalDeviceWaylandPresentaonSupportKHR(
VkPhysicalDevice physicalDevice,
uint32_t queueFamilyIndex,
struct wl_display* display);
Win32 Plaorm Querying [29.4.3]
VkBool32
vkGetPhysicalDeviceWin32PresentaonSupportKHR(
VkPhysicalDevice physicalDevice,
uint32_t queueFamilyIndex);
XCB Plaorm Querying [29.4.4]
VkBool32
vkGetPhysicalDeviceXcbPresentaonSupportKHR(
VkPhysicalDevice physicalDevice,
uint32_t queueFamilyIndex,
xcb_connecon_t* connecon,
xcb_visualid_t visual_id);
Xlib Plaorm Querying [29.4.5]
VkBool32
vkGetPhysicalDeviceXlibPresentaonSupportKHR(
VkPhysicalDevice physicalDevice,
uint32_t queueFamilyIndex,
Display* dpy, VisualID visualID);
Surface Queries [29.5]
VkResult vkGetPhysicalDeviceSurfaceCapabiliesKHR(
VkPhysicalDevice physicalDevice,
VkSurfaceKHR surface,
VkSurfaceCapabiliesKHR* pSurfaceCapabilies);
P.15
VkResult vkGetPhysicalDeviceSurfaceCapabilies2KHR(
VkPhysicalDevice physicalDevice,
const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo,
P.15
VkSurfaceCapabilies2KHR* pSurfaceCapabilies);
typedef struct VkSurfaceCapabilies2KHR {
VkStructureType sType; void* pNext;
VkSurfaceCapabiliesKHR surfaceCapabilies;
P.15
} VkSurfaceCapabilies2KHR;
pNext may point to struct:
VkSharedPresentSurfaceCapabiliesKHR
typedef struct VkSharedPresentSurfaceCapabiliesKHR {
VkStructureType sType; void* pNext;
VkImageUsageFlags
sharedPresentSupportedUsageFlags;
P.13
} VkSharedPresentSurfaceCapabiliesKHR;
VkResult vkGetPhysicalDeviceSurfaceFormatsKHR(
VkPhysicalDevice physicalDevice,
VkSurfaceKHR surface,
uint32_t* pSurfaceFormatCount,
VkSurfaceFormatKHR* pSurfaceFormats);
P.15
VkResult vkGetPhysicalDeviceSurfaceFormats2KHR(
VkPhysicalDevice physicalDevice,
const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo,
P.15
uint32_t* pSurfaceFormatCount,
VkSurfaceFormat2KHR* pSurfaceFormats);
typedef struct VkSurfaceFormat2KHR {
VkStructureType sType; void* pNext;
VkSurfaceFormatKHR surfaceFormat;
P.15
} VkSurfaceFormat2KHR;
VkResult vkGetPhysicalDeviceSurfacePresentModesKHR(
VkPhysicalDevice physicalDevice,
VkSurfaceKHR surface,
uint32_t* pPresentModeCount,
VkPresentModeKHR* pPresentModes);
pPresentModes: VK_PRESENT_MODE_X_KHR
where X is IMMEDIATE, MAILBOX, FIFO, FIFO_RELAXED,
SHARED_DEMAND_REFRESH,
SHARED_CONTINUOUS_REFRESH
Device Group Queries [29.6]
VkResult vkGetDeviceGroupPresentCapabiliesKHR(
VkDevice device,
VkDeviceGroupPresentCapabiliesKHR*
pDeviceGroupPresentCapabilies);
typedef struct VkDeviceGroupPresentCapabiliesKHR {
VkStructureType sType; const void* pNext;
uint32_t presentMask[VK_MAX_DEVICE_GROUP_SIZE];
VkDeviceGroupPresentModeFlagsKHR modes;
P.12
} VkDeviceGroupPresentCapabiliesKHR;
VkResult vkGetDeviceGroupSurfacePresentModesKHR(
VkDevice device, VkSurfaceKHR surface,
VkDeviceGroupPresentModeFlagsKHR* pModes);
P.12
VkResult vkGetPhysicalDevicePresentRectanglesKHR(
VkPhysicalDevice physicalDevice,
VkSurfaceKHR surface, uint32_t* pRectCount,
VkRect2D* pRects);
P.15
WSI Swapchain [29.7]
VkResult vkGetSwapchainStatusKHR(
VkDevice device,
VkSwapchainKHR swapchain);
VkResult vkCreateSwapchainKHR(
VkDevice device,
const VkSwapchainCreateInfoKHR* pCreateInfo,
const VkAllocaonCallbacks* pAllocator,
P.12
VkSwapchainKHR* pSwapchain);
typedef struct VkSwapchainCreateInfoKHR {
VkStructureType sType; const void* pNext;
VkSwapchainCreateFlagsKHR ags;
VkSurfaceKHR surface;
uint32_t minImageCount;
VkFormat imageFormat;
P.13
VkColorSpaceKHR imageColorSpace;
VkExtent2D imageExtent;
P12
uint32_t imageArrayLayers;
VkImageUsageFlags imageUsage;
P.13
VkSharingMode imageSharingMode;
P.15
uint32_t queueFamilyIndexCount;
const uint32_t* pQueueFamilyIndices;
VkSurfaceTransformFlagBitsKHR preTransform;
P.15
VkCompositeAlphaFlagBitsKHR compositeAlpha;
P.12
VkPresentModeKHR presentMode;
VkBool32 clipped;
VkSwapchainKHR oldSwapchain;
} VkSwapchainCreateInfoKHR;
pNext: may point to struct:
VkDeviceGroupSwapchainCreateInfoKHR
ags: VK_SWAPCHAIN_CREATE_X_KHR where X is
SPLIT_INSTANCE_BIND_REGIONS, PROTECTED
colorSpace: VK_COLOR_SPACE_SRGB_NONLINEAR_KHR
presentMode: VK_PRESENT_MODE_X_KHR
where X is IMMEDIATE, MAILBOX, FIFO, FIFO_RELAXED,
DEMAND_REFRESH, CONTINUOUS_REFRESH
typedef struct VkDeviceGroupSwapchainCreateInfoKHR {
VkStructureType sType; const void* pNext;
VkDeviceGroupPresentModeFlagsKHR modes;
} VkDeviceGroupSwapchainCreateInfoKHR;
modes: VK_DEVICE_GROUP_PRESENT_MODE_X_BIT_KHR
where X is LOCAL, REMOTE, SUM, LOCAL_MULTI_DEVICE
void vkDestroySwapchainKHR(
VkDevice device,
VkSwapchainKHR swapchain,
const VkAllocaonCallbacks* pAllocator);
P.12
VkResult vkCreateSharedSwapchainsKHR(
VkDevice device,
uint32_t swapchainCount,
const VkSwapchainCreateInfoKHR* pCreateInfos,
const VkAllocaonCallbacks* pAllocator,
P.12
VkSwapchainKHR* pSwapchains);
VkResult vkGetSwapchainImagesKHR(
VkDevice device,
VkSwapchainKHR swapchain,
uint32_t* pSwapchainImageCount,
VkImage* pSwapchainImages);
VkResult vkAcquireNextImageKHR(
VkDevice device,
VkSwapchainKHR swapchain,
uint64_t meout,
VkSemaphore semaphore,
VkFence fence,
uint32_t* pImageIndex);
VkResult vkAcquireNextImage2KHR(
VkDevice device,
const VkAcquireNextImageInfoKHR* pAcquireInfo,
uint32_t* pImageIndex);
typedef struct VkAcquireNextImageInfoKHR {
VkStructureType sType; const void* pNext;
VkSwapchainKHR swapchain;
uint64_t meout;
VkSemaphore semaphore;
VkFence fence;
uint32_t deviceMask;
} VkAcquireNextImageInfoKHR;
VkResult vkQueuePresentKHR(
VkQueue queue,
const VkPresentInfoKHR* pPresentInfo);
typedef struct VkPresentInfoKHR {
VkStructureType sType; const void* pNext;
uint32_t waitSemaphoreCount;
const VkSemaphore* pWaitSemaphores;
uint32_t swapchainCount;
const VkSwapchainKHR* pSwapchains;
const uint32_t* pImageIndices;
VkResult* pResults;
} VkPresentInfoKHR;
pNext may point to structs:
VkDeviceGroupPresentInfoKHR,
VkDisplayPresentInfoKHR, or VkPresentRegionsKHR
typedef struct VkDeviceGroupPresentInfoKHR {
VkStructureType sType; const void* pNext;
uint32_t swapchainCount;
const uint32_t* pDeviceMasks;
VkDeviceGroupPresentModeFlagBitsKHR mode;
} VkDeviceGroupPresentInfoKHR;
mode: VK_DEVICE_GROUP_PRESENT_MODE_X_BIT_KHR
where X is REMOTE, SUM, LOCAL, LOCAL_MULTI_DEVICE
typedef struct VkDisplayPresentInfoKHR {
VkStructureType sType; const void* pNext;
VkRect2D srcRect;
P.15
VkRect2D dstRect;
P.15
VkBool32 persistent;
} VkDisplayPresentInfoKHR;
typedef struct VkPresentRegionsKHR {
VkStructureType sType; const void* pNext;
uint32_t swapchainCount;
const VkPresentRegionKHR* pRegions;
} VkPresentRegionsKHR;
typedef struct VkPresentRegionKHR {
uint32_t rectangleCount;
const VkRectLayerKHR* pRectangles;
} VkPresentRegionKHR;
typedef struct VkRectLayerKHR {
VkOset2D oset;
P.14
VkExtent2D extent;
P.12
uint32_t layer;
} VkRectLayerKHR;
typedef struct VkDisplayPresentInfoKHR {
VkStructureType sType; const void* pNext;
VkRect2D srcRect;
P.15
VkRect2D dstRect;
P.15
VkBool32 persistent;
} VkDisplayPresentInfoKHR;

www.khronos.org/vulkan©2018 Khronos Group - Rev. 0318
Vulkan 1.1 Quick Reference Page 11
Features, Limits, and Formats [31]
Features [31.1]
void vkGetPhysicalDeviceFeatures(
VkPhysicalDevice physicalDevice,
VkPhysicalDeviceFeatures* pFeatures);
P14
void vkGetPhysicalDeviceFeatures2(
VkPhysicalDevice physicalDevice,
VkPhysicalDeviceFeatures2* pFeatures);
P.14
Format Properes [31.3.2]
void vkGetPhysicalDeviceFormatProperes(
VkPhysicalDevice physicalDevice,
VkFormat format,
P.13
VkFormatProperes* pFormatProperes);
typedef struct VkFormatProperes {
VkFormatFeatureFlags linearTilingFeatures;
VkFormatFeatureFlags opmalTilingFeatures;
VkFormatFeatureFlags buerFeatures;
} VkFormatProperes;
enum VkFormatFeatureFlagBits:
VK_FORMAT_FEATURE_X_BIT where X is
SAMPLED_IMAGE, STORAGE_IMAGE[_ATOMIC],
UNIFORM_TEXEL_BUFFER,
STORAGE_TEXEL_BUFFER[_ATOMIC],
VERTEX_BUFFER, COLOR_ATTACHMENT[_BLEND],
DEPTH_STENCIL_ATTACHMENT,
SAMPLED_IMAGE_FILTER_LINEAR, DISJOINT,
BLIT_{SRC, DST}, TRANSFER_{SRC, DST},
{MIDPOINT, COSITED}_CHROMA_SAMPLES,
and VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_-
CONVERSION_X where X is LINEAR_FILTER,
SEPARATE_RECONSTRUCTION_FILTER,
CHROMA_RECONSTRUCTION_EXPLICIT,
CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE
void vkGetPhysicalDeviceFormatProperes2(
VkPhysicalDevice physicalDevice,
VkFormat format,
P.13
VkFormatProperes2* pFormatProperes);
typedef struct VkFormatProperes2 {
VkStructureType sType;
void* pNext;
VkFormatProperes formatProperes;
} VkFormatProperes2;
Addional Image Capabilies [31.4]
VkResult vkGetPhysicalDeviceImageFormatProperes(
VkPhysicalDevice physicalDevice,
VkFormat format,
P.13
VkImageType type,
P.13
VkImageTiling ling,
P.13
VkImageUsageFlags usage,
P.13
VkImageCreateFlags ags,
P.13
VkImageFormatProperes* pImageFormatProperes);
typedef struct VkImageFormatProperes {
VkExtent3D maxExtent;
P12
uint32_t maxMipLevels;
uint32_t maxArrayLayers;
VkSampleCountFlags sampleCounts;
P.15
VkDeviceSize maxResourceSize;
} VkImageFormatProperes;
VkResult vkGetPhysicalDeviceImageFormatProperes2(
VkPhysicalDevice physicalDevice,
const VkPhysicalDeviceImageFormatInfo2*
pImageFormatInfo,
VkImageFormatProperes2* pImageFormatProperes);
typedef struct VkImageFormatProperes2 {
VkStructureType sType;
void* pNext;
VkImageFormatProperes imageFormatProperes;
} VkImageFormatProperes2;
pNext may point to struct:
VkExternalImageFormatProperes
P.12
VkSamplerYcbcrConversionImageFormatProperes
P.15
typedef struct VkPhysicalDeviceImageFormatInfo2 {
VkStructureType sType;
const void* pNext;
VkFormat format,
P.13
VkImageType type,
P.13
VkImageTiling ling,
P.13
VkImageUsageFlags usage,
P.13
VkImageCreateFlags ags,
P.13
} VkPhysicalDeviceImageFormatInfo2;
pNext may point to struct:
VkPhysicalDeviceExternalImageFormatInfo
P.14
Command Buer Lifecycle [5.1]
A command buer is always in one of the ve states shown below:
Inial
A command buer in the inial state
can only be moved to the recording
state or freed.
Recording
In this state, vkCmd* commands
record to the command buer.
Executable
In this state, the command buer
may be submied, reset, or recorded
to another command buer.
Pending
Aempng to modify the command
buer in this state will cause a
transion to the invalid state.
Invalid
In this state, a command buer may
be reset, moved to recording state, or
freed.
Extended Funconality (connued)
typedef struct VkExtensionProperes {
char layerName [VK_MAX_EXTENSION_NAME_SIZE];
uint32_t specVersion;
} VkExtensionProperes;
Addional Buer Capabilies [31.5]
void vkGetPhysicalDeviceExternalBuerProperes(
VkPhysicalDevice physicalDevice,
const VkPhysicalDeviceExternalBuerInfo*
pExternalBuerInfo,
VkExternalBuerProperes*
pExternalBuerProperes);
typedef struct VkPhysicalDeviceExternalBuerInfo {
VkStructureType sType;
const void* pNext;
VkBuerCreateFlags ags;
P.12
VkBuerUsageFlags usage;
P.12
VkExternalMemoryHandleTypeFlagBits handleType;
P.12
} VkPhysicalDeviceExternalBuerInfo;
typedef struct VkExternalBuerProperes {
VkStructureType sType;
void* pNext;
VkExternalMemoryProperes
externalMemoryProperes;
P.13
} VkExternalBuerProperes;
Oponal Semaphore Capabilies [31.6]
void vkGetPhysicalDeviceExternalSemaphoreProperes(
VkPhysicalDevice physicalDevice,
const VkPhysicalDeviceExternalSemaphoreInfo*
pExternalSemaphoreInfo,
VkExternalSemaphoreProperes*
pExternalSemaphoreProperes);
typedef struct VkPhysicalDeviceExternalSemaphoreInfo {
VkStructureType sType;
const void* pNext;
VkExternalSemaphoreHandleTypeFlagBits
handleType;
P.13
} VkPhysicalDeviceExternalSemaphoreInfo;
enum VkExternalSemaphoreHandleTypeFlagBits:
VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_X_BIT
where X is OPAQUE_FD,
OPAQUE_WIN32[_KMT],
D3D12_FENCE, SYNC_FD
typedef struct VkExternalSemaphoreProperes {
VkStructureType sType; void* pNext;
VkExternalSemaphoreHandleTypeFlags
exportFromImportedHandleTypes;
P.13
VkExternalSemaphoreHandleTypeFlags
compableHandleTypes;
VkExternalSemaphoreFeatureFlags
externalSemaphoreFeatures;
} VkExternalSemaphoreProperes;
VkExternalSemaphoreFeatureFlagBits:
VK_EXTERNAL_SEMAPHORE_FEATURE_X_BIT where X is
EXPORTABLE, IMPORTABLE
Oponal Fence Capabilies [31.7]
void vkGetPhysicalDeviceExternalFenceProperes(
VkPhysicalDevice physicalDevice,
const VkPhysicalDeviceExternalFenceInfo*
pExternalFenceInfo,
VkExternalFenceProperes* pExternalFenceProperes);
typedef struct VkPhysicalDeviceExternalFenceInfo {
VkStructureType sType;
const void* pNext;
VkExternalFenceHandleTypeFlagBits handleType;
P.12
} VkPhysicalDeviceExternalFenceInfo;
typedef struct VkExternalFenceProperes {
VkStructureType sType;
void* pNext;
VkExternalFenceHandleTypeFlags
exportFromImportedHandleTypes;
P.12
VkExternalFenceHandleTypeFlags
compableHandleTypes;
P.12
VkExternalFenceFeatureFlags externalFenceFeatures;
} VkExternalFenceProperes;
enum VkExternalFenceFeatureFlagBits:
VK_EXTERNAL_FENCE_FEATURE_X_BIT where X is
EXPORTABLE, IMPORTABLE

www.khronos.org/vulkan
©2018 Khronos Group - Rev. 0318
Vulkan 1.1 Quick Reference Page 12
Structures and Enumeraons
This secon contains an alphabec reference to types enums
and structs referenced in mulple places on preceding pages.
enum VkAccessFlagBits:
VK_ACCESS_X_BIT where X is
INDIRECT_COMMAND_READ,
INDEX_READ,
VERTEX_ATTRIBUTE_READ,
UNIFORM_READ,
INPUT_ATTACHMENT_READ,
SHADER_[READ, WRITE],
COLOR_ATTACHMENT_[READ, WRITE],
DEPTH_STENCIL_ATTACHMENT_[READ, WRITE],
TRANSFER_[READ, WRITE],
HOST_[READ, WRITE],
MEMORY_[READ, WRITE]
typedef struct VkAllocaonCallbacks {
void* pUserData;
PFN_vkAllocaonFuncon pfnAllocaon;
PFN_vkReallocaonFuncon pfnReallocaon;
PFN_vkFreeFuncon pfnFree;
PFN_vkInternalAllocaonNocaon
pfnInternalAllocaon;
PFN_vkInternalFreeNocaon pfnInternalFree;
} VkAllocaonCallbacks;
typedef void* (VKAPI_PTR* PFN_vkAllocaonFuncon)(
void* pUserData,
size_t size,
size_t alignment,
VkSystemAllocaonScope allocaonScope);
typedef void* (VKAPI_PTR* PFN_vkReallocaonFuncon)(
void* pUserData,
void* pOriginal,
size_t size,
size_t alignment,
VkSystemAllocaonScope allocaonScope);
typedef void (VKAPI_PTR* PFN_vkFreeFuncon)(
void* pUserData,
void* pMemory);
typedef void (
VKAPI_PTR* PFN_vkInternalAllocaonNocaon)(
void* pUserData,
size_t size,
VkInternalAllocaonType allocaonType,
VkSystemAllocaonScope allocaonScope);
typedef void (
VKAPI_PTR* PFN_vkInternalFreeNocaon)(
void* pUserData,
size_t size,
VkInternalAllocaonType allocaonType,
VkSystemAllocaonScope allocaonScope);
allocaonType:
VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE
allocaonScope: VK_SYSTEM_ALLOCATION_SCOPE_X where
X is COMMAND, OBJECT, CACHE, DEVICE, INSTANCE
typedef struct VkBindBuerMemoryDeviceGroupInfo {
VkStructureType sType; const void* pNext;
uint32_t deviceIndexCount;
const uint32_t* pDeviceIndices;
} VkBindBuerMemoryDeviceGroupInfo;
typedef struct VkBindImageMemoryDeviceGroupInfo {
VkStructureType sType; const void* pNext;
uint32_t deviceIndexCount;
const uint32_t* pDeviceIndices;
uint32_t splitInstanceBindRegionCount;
const VkRect2D* pSplitInstanceBindRegions;
P.15
} VkBindImageMemoryDeviceGroupInfo;
typedef struct VkBindImagePlaneMemoryInfo {
VkStructureType sType; const void* pNext;
VkImageAspectFlagBits planeAspect;
P.13
} VkBindImagePlaneMemoryInfo;
enum VkBlendOp:
VK_BLEND_OP_ADD,
VK_BLEND_OP_SUBTRACT,
VK_BLEND_OP_REVERSE_SUBTRACT,
VK_BLEND_OP_MIN,
VK_BLEND_OP_MAX
enum VkBuerCreateFlagBits:
VK_BUFFER_CREATE_SPARSE_BINDING_BIT,
VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT,
VK_BUFFER_CREATE_SPARSE_ALIASED_BIT,
VK_BUFFER_CREATE_PROTECTED_BIT
typedef struct VkBuerMemoryBarrier {
VkStructureType sType; const void* pNext;
VkAccessFlags srcAccessMask;
P.12
VkAccessFlags dstAccessMask;
P.12
uint32_t srcQueueFamilyIndex;
uint32_t dstQueueFamilyIndex;
VkBuer buer;
VkDeviceSize oset;
VkDeviceSize size;
} VkBuerMemoryBarrier;
enum VkBuerUsageFlagBits:
VK_BUFFER_USAGE_X_BIT where X is
TRANSFER_SRC, TRANSFER_DST,
UNIFORM_TEXEL_BUFFER, STORAGE_TEXEL_BUFFER,
UNIFORM_BUFFER, STORAGE_BUFFER, INDEX_BUFFER,
VERTEX_BUFFER, INDIRECT_BUFFER
typedef union VkClearColorValue {
oat oat32[4];
int32_t int32[4];
uint32_t uint32[4];
} VkClearColorValue;
typedef struct VkClearDepthStencilValue {
oat depth;
uint32_t stencil;
} VkClearDepthStencilValue;
typedef union VkClearValue {
VkClearColorValue color;
P.12
VkClearDepthStencilValue depthStencil;
P.12
} VkClearValue;
enum VkCompareOp:
VK_COMPARE_OP_X where X is
NEVER, LESS, EQUAL,
LESS_OR_EQUAL,
GREATER,
NOT_EQUAL,
GREATER_OR_EQUAL,
ALWAYS
enum VkCompositeAlphaFlagBitsKHR:
VK_COMPOSITE_ALPHA_X_BIT_KHR where X is
OPAQUE,
PRE_MULTIPLIED,
POST_MULTIPLIED,
INHERIT
enum VkDependencyFlagBits:
VK_DEPENDENCY_BY_REGION_BIT,
VK_DEPENDENCY_DEVICE_GROUP_BIT,
VK_DEPENDENCY_VIEW_LOCAL_BIT
enum VkDescriptorType:
VK_DESCRIPTOR_TYPE_X where X is
SAMPLER,
COMBINED_IMAGE_SAMPLER,
SAMPLED_IMAGE,
STORAGE_IMAGE,
UNIFORM_TEXEL_BUFFER,
STORAGE_TEXEL_BUFFER,
UNIFORM_BUFFER[_DYNAMIC],
STORAGE_BUFFER[_DYNAMIC],
INPUT_ATTACHMENT
typedef struct VkDescriptorSetLayoutBinding {
uint32_t binding;
VkDescriptorType descriptorType;
P.12
uint32_t descriptorCount;
VkShaderStageFlags stageFlags;
P.15
const VkSampler* pImmutableSamplers;
} VkDescriptorSetLayoutBinding;
typedef struct VkDescriptorSetLayoutCreateInfo {
VkStructureType sType; const void *pNext;
VkDescriptorSetLayoutCreateFlags ags;
uint32_t bindingCount;
const VkDescriptorSetLayoutBinding* pBindings;
} VkDescriptorSetLayoutCreateInfo;
typedef struct VkDeviceGroupBindSparseInfo {
VkStructureType sType; const void* pNext;
uint32_t resourceDeviceIndex;
uint32_t memoryDeviceIndex;
} VkDeviceGroupBindSparseInfo;
typedef struct VkDeviceGroupCommandBuerBeginInfo {
VkStructureType sType; const void* pNext;
uint32_t deviceMask;
} VkDeviceGroupCommandBuerBeginInfo;
typedef struct VkDeviceGroupDeviceCreateInfo {
VkStructureType sType; const void* pNext;
uint32_t physicalDeviceCount;
const VkPhysicalDevice* pPhysicalDevices;
} VkDeviceGroupDeviceCreateInfo;
enum VkDeviceGroupPresentModeFlagBitsKHR:
VK_DEVICE_GROUP_PRESENT_MODE_X_BIT_KHR where X is
LOCAL,
REMOTE,
SUM,
LOCAL_MULTI_DEVICE
typedef struct VkDeviceGroupRenderPassBeginInfo {
VkStructureType sType; const void* pNext;
uint32_t deviceMask;
uint32_t deviceRenderAreaCount;
const VkRect2D* pDeviceRenderAreas;
P.15
} VkDeviceGroupRenderPassBeginInfo;
typedef struct VkDeviceGroupSubmitInfo {
VkStructureType sType; const void* pNext;
uint32_t waitSemaphoreCount;
const uint32_t* pWaitSemaphoreDeviceIndices;
uint32_t commandBuerCount;
const uint32_t* pCommandBuerDeviceMasks;
uint32_t signalSemaphoreCount;
const uint32_t* pSignalSemaphoreDeviceIndices;
} VkDeviceGroupSubmitInfo;
typedef struct VkExportFenceCreateInfo {
VkStructureType sType;
const void* pNext;
VkExternalFenceHandleTypeFlags handleTypes;
P.12
} VkExportFenceCreateInfo;
typedef struct VkExportMemoryAllocateInfo {
VkStructureType sType; const void* pNext;
VkExternalMemoryHandleTypeFlags handleTypes;
P.12
} VkExportMemoryAllocateInfo;
typedef struct VkExportSemaphoreCreateInfo {
VkStructureType sType;
const void* pNext;
VkExternalSemaphoreHandleTypeFlags handleTypes;
P.13
} VkExportSemaphoreCreateInfo;
typedef struct VkExtent2D {
uint32_t width;
uint32_t height;
} VkExtent2D;
typedef struct VkExtent3D {
uint32_t width;
uint32_t height;
uint32_t depth;
} VkExtent3D;
enum VkExternalFenceHandleTypeFlagBits:
VK_EXTERNAL_FENCE_HANDLE_TYPE_X_BIT where X is
OPAQUE_FD,
OPAQUE_WIN32,
OPAQUE_WIN32_KMT,
SYNC_FD
typedef struct VkExternalImageFormatProperes {
VkStructureType sType; void* pNext;
VkExternalMemoryProperes
externalMemoryProperes;
P13
} VkExternalImageFormatProperes;
typedef struct VkExternalMemoryBuerCreateInfo {
VkStructureType sType; const void* pNext;
VkExternalMemoryHandleTypeFlags handleTypes;
P.12
} VkExternalMemoryBuerCreateInfo;
enum VkExternalMemoryFeatureFlagBits:
VK_EXTERNAL_MEMORY_FEATURE_X_BIT where X is
DEDICATED_ONLY,
EXPORTABLE,
IMPORTABLE
enum VkExternalMemoryHandleTypeFlagBits:
VK_EXTERNAL_MEMORY_HANDLE_TYPE_X_BIT where X is
OPAQUE_FD,
OPAQUE_WIN32,
OPAQUE_WIN32_KMT,
D3D11_TEXTURE,
D3D11_TEXTURE_KMT,
D3D12_HEAP,
D3D12_RESOURCE
Connued on next page >

www.khronos.org/vulkan©2018 Khronos Group - Rev. 0318
Vulkan 1.1 Quick Reference Page 13
Structures and Enumeraons (connued)
typedef struct VkExternalMemoryImageCreateInfo {
VkStructureType sType; const void* pNext;
VkExternalMemoryHandleTypeFlags handleTypes;
P.12
} VkExternalMemoryImageCreateInfo;
typedef struct VkExternalMemoryProperes {
VkExternalMemoryFeatureFlags
externalMemoryFeatures;
P.12
VkExternalMemoryHandleTypeFlags
exportFromImportedHandleTypes;
P12
VkExternalMemoryHandleTypeFlags
compableHandleTypes;
P12
} VkExternalMemoryProperes;
enum VkExternalSemaphoreHandleTypeFlagBits:
VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_X_BIT where
X is OPAQUE_FD, OPAQUE_WIN32, OPAQUE_WIN32_KMT,
D3D12_FENCE, SYNC_FD
enum VkFormat:
VK_FORMAT_X where X is
UNDEFINED,
R4G4_UNORM_PACK8,
R4G4B4A4_UNORM_PACK16,
B4G4R4A4_UNORM_PACK16,
R5G6B5_UNORM_PACK16,
B5G6R5_UNORM_PACK16,
R5G5B5A1_UNORM_PACK16,
B5G5R5A1_UNORM_PACK16,
A1R5G5B5_UNORM_PACK16,
R8_[UNORM, SNORM, USCALED],
R8_[SSCALED, UINT, SINT, SRGB],
R8G8_[UNORM, SNORM, USCALED],
R8G8_[SSCALED, UINT, SINT, SRGB],
R8G8B8_[UNORM, SNORM, USCALED],
R8G8B8_[SSCALED, UINT, SINT, SRGB],
B8G8R8_[UNORM, SNORM, USCALED],
B8G8R8_[SSCALED, UINT, SINT, SRGB],
R8G8B8A8_[UNORM, SNORM, USCALED],
R8G8B8A8_[SSCALED, UINT, SINT, SRGB],
B8G8R8A8_[UNORM, SNORM, USCALED],
B8G8R8A8_[SSCALED, UINT, SINT, SRGB],
A8B8G8R8_[UNORM, SNORM, USCALED]_PACK32,
A8B8G8R8_[SSCALED, UINT, SINT, SRGB]_PACK32,
A2R10G10B10_[UNORM, SNORM, USCALED]_PACK32,
A2R10G10B10_[SSCALED, UINT, SINT]_PACK32,
A2B10G10R10_[UNORM, SNORM, USCALED]_PACK32,
A2B10G10R10_[SSCALED, UINT, SINT]_PACK32,
R16_[UNORM, SNORM, USCALED],
R16_[SSCALED, UINT, SINT, SFLOAT],
R16G16_[UNORM, SNORM, USCALED],
R16G16_[SSCALED, UINT, SINT, SFLOAT],
R16G16B16_[UNORM, SNORM, USCALED],
R16G16B16_[SSCALED, UINT, SINT, SFLOAT],
R16G16B16A16_[UNORM, SNORM, USCALED],
R16G16B16A16_[SSCALED, UINT, SINT, SFLOAT],
R32_[UINT, SINT, SFLOAT],
R32G32_[UINT, SINT, SFLOAT],
R32G32B32_[UINT, SINT, SFLOAT],
R32G32B32A32_[UINT, SINT, SFLOAT],
R64_[UINT, SINT, SFLOAT],
R64G64_[UINT, SINT, SFLOAT],
R64G64B64_[UINT, SINT, SFLOAT],
R64G64B64A64_[UINT, SINT, SFLOAT],
B10G11R11_UFLOAT_PACK32,
E5B9G9R9_UFLOAT_PACK32,
X8_D24_UNORM_PACK32,
D32_SFLOAT[_S8_UINT],
S8_UINT,
D[16, 24]_UNORM_S8_UINT,
BC1_[RGB, RGBA]_UNORM_BLOCK,
BC1_[RGB, RGBA]_SRGB_BLOCK,
BC2_[UNORM, SRGB]_BLOCK,
BC3_[UNORM, SRGB]_BLOCK,
BC4_[UNORM, SRGB]_BLOCK,
BC5_[UNORM, SRGB]_BLOCK,
BC6H_[UFLOAT, SFLOAT]_BLOCK,
BC7_[UNORM, SRGB]_BLOCK,
ETC2_R8G8B8_[UNORM, SRGB]_BLOCK,
ETC2_R8G8B8A1_[UNORM, SRGB]_BLOCK,
ETC2_R8G8B8A8_[UNORM, SRGB]_BLOCK,
EAC_R11_[UNORM, SRGB]_BLOCK,
EAC_R11G11_[UNORM, SRGB]_BLOCK,
ASTC_4x4_[UNORM, SRGB]_BLOCK,
ASTC_5x4_[UNORM, SRGB]_BLOCK,
ASTC_5x5_[UNORM, SRGB]_BLOCK,
ASTC_6x5_[UNORM, SRGB]_BLOCK,
ASTC_6x6_[UNORM, SRGB]_BLOCK,
ASTC_8x5_[UNORM, SRGB]_BLOCK,
ASTC_8x6_[UNORM, SRGB]_BLOCK,
ASTC_8x8_[UNORM, SRGB]_BLOCK,
ASTC_10x5_[UNORM, SRGB]_BLOCK,
ASTC_10x6_[UNORM, SRGB]_BLOCK,
ASTC_10x8_[UNORM, SRGB]_BLOCK,
ASTC_10x10_[UNORM, SRGB]_BLOCK,
ASTC_12x10_[UNORM, SRGB]_BLOCK,
ASTC_12x12_[UNORM, SRGB]_BLOCK,
G8B8G8R8_422_UNORM,
B8G8R8G8_422_UNORM,
G8_B8_R8_3PLANE_420_UNORM,
G8_B8R8_2PLANE_{420, 422}_UNORM,
G8_B8_R8_3PLANE_{422, 444}_UNORM,
R10X6_UNORM_PACK16,
R10X6G10X6_UNORM_2PACK16,
R10X6G10X6B10X6A10X6_UNORM_4PACK16,
G10X6B10X6G10X6R10X6_422_UNORM_4PACK16,
B10X6G10X6R10X6G10X6_422_UNORM_4PACK16,
G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16,
G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16,
G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16,
G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16,
G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16,
R12X4_UNORM_PACK16,
R12X4G12X4_UNORM_2PACK16,
R12X4G12X4B12X4A12X4_UNORM_4PACK16,
G12X4B12X4G12X4R12X4_422_UNORM_4PACK16,
B12X4G12X4R12X4G12X4_422_UNORM_4PACK16,
G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16,
G12X4_B12X4R12X4_2PLANE_{420, 422}_UNORM_3PACK16,
G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16,
G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16,
G16B16G16R16_422_UNORM,
B16G16R16G16_422_UNORM,
G16_B16_R16_3PLANE_{420, 422, 444}_UNORM,
G16_B16R16_2PLANE_{420, 422}_UNORM
enum VkImageAspectFlagBits:
VK_IMAGE_ASPECT_X_BIT where X is
COLOR,
DEPTH,
STENCIL,
METADATA,
PLANE_[0,1,2]
enum VkImageCreateFlagBits:
VK_IMAGE_CREATE_
X
_BIT where X is
SPARSE_{BINDING, RESIDENCY, ALIASED},
MUTABLE_FORMAT,
{CUBE, 2D_ARRAY, TEXEL_VIEW}_COMPATIBLE,
ALIAS, BIND_SFR,
EXTENDED_USAGE,
PROTECTED,
DISJOINT
enum VkImageLayout:
VK_IMAGE_LAYOUT_X where X is
UNDEFINED, GENERAL, PREINITIALIZED,
COLOR_ATTACHMENT_OPTIMAL,
DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL,
DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL,
DEPTH_STENCIL_ATTACHMENT_OPTIMAL,
DEPTH_STENCIL_READ_ONLY_OPTIMAL,
SHADER_READ_ONLY_OPTIMAL,
TRANSFER_{SRC, DST}_OPTIMAL,
DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL,
DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL,
VK_IMAGE_LAYOUT_PRESENT_SRC_KHR,
VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR
NOTE: For the funcons vkCmdCopyImage,
vkCmdCopyBuerToImage, vkCmdCopyImageToBuer,
vkCmdBlitImage, and vkCmdResolveImage, the enum
VkImageLayout for the following parameters may be:
srcImageLayout: VK_IMAGE_LAYOUT_GENERAL,
VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR
dstImageLayout: VK_IMAGE_LAYOUT_GENERAL,
VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR
typedef struct VkImageMemoryBarrier {
VkStructureType sType; const void* pNext;
VkAccessFlags srcAccessMask;
P.12
VkAccessFlags dstAccessMask;
P.12
VkImageLayout oldLayout;
P.13
VkImageLayout newLayout;
P.13
uint32_t srcQueueFamilyIndex;
uint32_t dstQueueFamilyIndex;
VkImage image;
VkImageSubresourceRange subresourceRange;
P.1313
} VkImageMemoryBarrier;
typedef struct VkImagePlaneMemoryRequirementsInfo {
VkStructureType sType; const void* pNext;
VkImageAspectFlagBits planeAspect;
P.1313
} VkImagePlaneMemoryRequirementsInfo;
typedef struct VkImageSubresourceLayers {
VkImageAspectFlags aspectMask;
P.13
uint32_t mipLevel;
uint32_t baseArrayLayer;
uint32_t layerCount;
} VkImageSubresourceLayers;
typedef struct VkImageSubresourceRange {
VkImageAspectFlags aspectMask;
P.13
uint32_t baseMipLevel;
uint32_t levelCount;
uint32_t baseArrayLayer;
uint32_t layerCount;
} VkImageSubresourceRange;
enum VkImageTiling:
VK_IMAGE_TILING_{OPTIMAL, LINEAR}
enum VkImageType:
VK_IMAGE_TYPE_{1D, 2D, 3D}
enum VkImageUsageFlagBits:
VK_IMAGE_USAGE_X_BIT where X is
TRANSFER_SRC,
TRANSFER_DST,
SAMPLED,
STORAGE,
COLOR_ATTACHMENT,
DEPTH_STENCIL_ATTACHMENT,
TRANSIENT_ATTACHMENT,
INPUT_ATTACHMENT
typedef struct VkImageViewUsageCreateInfo {
VkStructureType sType; const void* pNext;
VkImageUsageFlags usage;
P.13
} VkImageViewUsageCreateInfo;
typedef struct VkInputAachmentAspectReference {
uint32_t subpass;
uint32_t inputAachmentIndex;
VkImageAspectFlags aspectMask;
P.13
} VkInputAachmentAspectReference;
typedef struct VkMemoryAllocateFlagsInfo {
VkStructureType sType; const void* pNext;
VkMemoryAllocateFlags ags;
uint32_t deviceMask;
} VkMemoryAllocateFlagsInfo;
ags: VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT
typedef struct VkMemoryBarrier {
VkStructureType sType; const void* pNext;
VkAccessFlags srcAccessMask;
P.12
VkAccessFlags dstAccessMask;
P.12
} VkMemoryBarrier;
typedef struct VkMemoryDedicatedAllocateInfo {
VkStructureType sType; const void* pNext;
VkImage image;
VkBuer buer;
} VkMemoryDedicatedAllocateInfo;
typedef struct VkMemoryDedicatedRequirements {
VkStructureType sType; void* pNext;
VkBool32 prefersDedicatedAllocaon;
VkBool32 requiresDedicatedAllocaon;
} VkMemoryDedicatedRequirements;
typedef struct VkMemoryHeap {
VkDeviceSize size;
VkMemoryHeapFlags ags;
} VkMemoryHeap;
ags: VK_MEMORY_HEAP_X_BIT where X is
DEVICE_LOCAL, MULTI_INSTANCE
typedef struct VkMemoryRequirements {
VkDeviceSize size;
VkDeviceSize alignment;
uint32_t memoryTypeBits;
} VkMemoryRequirements;
typedef struct VkMemoryRequirements2 {
VkStructureType sType; void* pNext;
VkMemoryRequirements memoryRequirements;
P.13
} VkMemoryRequirements2;
pNext may point to structs:
VkMemoryDedicatedRequirements
P13
Connued on next page >

www.khronos.org/vulkan
©2018 Khronos Group - Rev. 0318
Vulkan 1.1 Quick Reference Page 14
Structures and Enumeraons (connued)
typedef struct VkMemoryType {
VkMemoryPropertyFlags propertyFlags;
uint32_t heapIndex;
} VkMemoryType;
propertyFlags: VK_MEMORY_PROPERTY_X_BIT where X is
DEVICE_LOCAL, HOST_VISIBLE, HOST_COHERENT,
HOST_CACHED, LAZILY_ALLOCATED, PROTECTED
typedef struct VkOset2D {
int32_t x;
int32_t y;
} VkOset2D;
typedef struct VkOset3D {
int32_t x;
int32_t y;
int32_t z;
} VkOset3D;
typedef struct VkPhysicalDevice16BitStorageFeatures {
VkStructureType sType; void* pNext;
VkBool32 storageBuer16BitAccess;
VkBool32 uniformAndStorageBuer16BitAccess;
VkBool32 storagePushConstant16;
VkBool32 storageInputOutput16;
} VkPhysicalDevice16BitStorageFeatures;
typedef struct VkPhysicalDeviceExternalImageFormatInfo {
VkStructureType sType; const void* pNext;
VkExternalMemoryHandleTypeFlagBits handleType;
P.1512
} VkPhysicalDeviceExternalImageFormatInfo;
typedef struct VkPhysicalDeviceFeatures {
VkBool32 robustBuerAccess;
VkBool32 fullDrawIndexUint32;
VkBool32 imageCubeArray;
VkBool32 independentBlend;
VkBool32 geometryShader;
VkBool32 tessellaonShader;
VkBool32 sampleRateShading;
VkBool32 dualSrcBlend;
VkBool32 logicOp;
VkBool32 mulDrawIndirect;
VkBool32 drawIndirectFirstInstance;
VkBool32 depthClamp;
VkBool32 depthBiasClamp;
VkBool32 llModeNonSolid;
VkBool32 depthBounds;
VkBool32 wideLines;
VkBool32 largePoints;
VkBool32 alphaToOne;
VkBool32 mulViewport;
VkBool32 samplerAnisotropy;
VkBool32 textureCompressionETC2;
VkBool32 textureCompressionASTC_LDR;
VkBool32 textureCompressionBC;
VkBool32 occlusionQueryPrecise;
VkBool32 pipelineStascsQuery;
VkBool32 vertexPipelineStoresAndAtomics;
VkBool32 fragmentStoresAndAtomics;
VkBool32 shaderTessellaonAndGeometryPointSize;
VkBool32 shaderImageGatherExtended;
VkBool32 shaderStorageImageExtendedFormats;
VkBool32 shaderStorageImageMulsample;
VkBool32 shaderStorageImageReadWithoutFormat;
VkBool32 shaderStorageImageWriteWithoutFormat;
VkBool32 shaderUniformBuerArrayDynamicIndexing;
VkBool32 shaderSampledImageArrayDynamicIndexing;
VkBool32 shaderStorageBuerArrayDynamicIndexing;
VkBool32 shaderStorageImageArrayDynamicIndexing;
VkBool32 shaderClipDistance;
VkBool32 shaderCullDistance;
VkBool32 shaderFloat64;
VkBool32 shaderInt64;
VkBool32 shaderInt16;
VkBool32 shaderResourceResidency;
VkBool32 shaderResourceMinLod;
VkBool32 sparseBinding;
VkBool32 sparseResidencyBuer;
VkBool32 sparseResidencyImage2D;
VkBool32 sparseResidencyImage3D;
VkBool32 sparseResidency2Samples;
VkBool32 sparseResidency4Samples;
VkBool32 sparseResidency8Samples;
VkBool32 sparseResidency16Samples;
VkBool32 sparseResidencyAliased;
VkBool32 variableMulsampleRate;
VkBool32 inheritedQueries;
} VkPhysicalDeviceFeatures;
typedef struct VkPhysicalDeviceFeatures2 {
VkStructureType sType; void* pNext;
VkPhysicalDeviceFeatures features;
P.14
} VkPhysicalDeviceFeatures2;
pNext may point to these structs:
VkPhysicalDevice16BitStorageFeatures
P.14
VkPhysicalDeviceMulviewFeatures
P.14
VkPhysicalDeviceProtectedMemoryFeatures
P.15
VkPhysicalDeviceSamplerYcbcrConversionFeatures
P.15
VkPhysicalDeviceShaderDrawParameterFeatures
P.15
VkPhysicalDeviceVariablePointerFeatures
P.15
typedef struct VkPhysicalDeviceIDProperes {
VkStructureType sType; void* pNext;
uint8_t deviceUUID[VK_UUID_SIZE];
uint8_t driverUUID[VK_UUID_SIZE];
uint8_t deviceLUID[VK_LUID_SIZE];
uint32_t deviceNodeMask;
VkBool32 deviceLUIDValid;
} VkPhysicalDeviceIDProperes;
typedef struct VkPhysicalDeviceLimits {
uint32_t maxImageDimension1D;
uint32_t maxImageDimension2D;
uint32_t maxImageDimension3D;
uint32_t maxImageDimensionCube;
uint32_t maxImageArrayLayers;
uint32_t maxTexelBuerElements;
uint32_t maxUniformBuerRange;
uint32_t maxStorageBuerRange;
uint32_t maxPushConstantsSize;
uint32_t maxMemoryAllocaonCount;
uint32_t maxSamplerAllocaonCount;
VkDeviceSize buerImageGranularity;
VkDeviceSize sparseAddressSpaceSize;
uint32_t maxBoundDescriptorSets;
uint32_t maxPerStageDescriptorSamplers;
uint32_t maxPerStageDescriptorUniformBuers;
uint32_t maxPerStageDescriptorStorageBuers;
uint32_t maxPerStageDescriptorSampledImages;
uint32_t maxPerStageDescriptorStorageImages;
uint32_t maxPerStageDescriptorInputAachments;
uint32_t maxPerStageResources;
uint32_t maxDescriptorSetSamplers;
uint32_t maxDescriptorSetUniformBuers;
uint32_t maxDescriptorSetUniformBuersDynamic;
uint32_t maxDescriptorSetStorageBuers;
uint32_t maxDescriptorSetStorageBuersDynamic;
uint32_t maxDescriptorSetSampledImages;
uint32_t maxDescriptorSetStorageImages;
uint32_t maxDescriptorSetInputAachments;
uint32_t maxVertexInputAributes;
uint32_t maxVertexInputBindings;
uint32_t maxVertexInputAributeOset;
uint32_t maxVertexInputBindingStride;
uint32_t maxVertexOutputComponents;
uint32_t maxTessellaonGeneraonLevel;
uint32_t maxTessellaonPatchSize;
uint32_t
maxTessellaonControlPerVertexInputComponents;
uint32_t
maxTessellaonControlPerVertexOutputComponents;
uint32_t
maxTessellaonControlPerPatchOutputComponents;
uint32_t maxTessellaonControlTotalOutputComponents;
uint32_t maxTessellaonEvaluaonInputComponents;
uint32_t maxTessellaonEvaluaonOutputComponents;
uint32_t maxGeometryShaderInvocaons;
uint32_t maxGeometryInputComponents;
uint32_t maxGeometryOutputComponents;
uint32_t maxGeometryOutputVerces;
uint32_t maxGeometryTotalOutputComponents;
uint32_t maxFragmentInputComponents;
uint32_t maxFragmentOutputAachments;
uint32_t maxFragmentDualSrcAachments;
uint32_t maxFragmentCombinedOutputResources;
uint32_t maxComputeSharedMemorySize;
uint32_t maxComputeWorkGroupCount[3];
uint32_t maxComputeWorkGroupInvocaons;
uint32_t maxComputeWorkGroupSize[3];
uint32_t subPixelPrecisionBits;
uint32_t subTexelPrecisionBits;
uint32_t mipmapPrecisionBits;
uint32_t maxDrawIndexedIndexValue;
uint32_t maxDrawIndirectCount;
oat maxSamplerLodBias;
oat maxSamplerAnisotropy;
uint32_t maxViewports;
uint32_t maxViewportDimensions[2];
oat viewportBoundsRange[2];
uint32_t viewportSubPixelBits;
size_t minMemoryMapAlignment;
VkDeviceSize minTexelBuerOsetAlignment;
VkDeviceSize minUniformBuerOsetAlignment;
VkDeviceSize minStorageBuerOsetAlignment;
int32_t minTexelOset;
uint32_t maxTexelOset;
int32_t minTexelGatherOset;
uint32_t maxTexelGatherOset;
oat minInterpolaonOset;
oat maxInterpolaonOset;
uint32_t subPixelInterpolaonOsetBits;
uint32_t maxFramebuerWidth;
uint32_t maxFramebuerHeight;
uint32_t maxFramebuerLayers;
VkSampleCountFlags framebuerColorSampleCounts;
P.15
VkSampleCountFlags framebuerDepthSampleCounts;
P.15
VkSampleCountFlags framebuerStencilSampleCounts;
P.15
VkSampleCountFlags
framebuerNoAachmentsSampleCounts;
P.15
uint32_t maxColorAachments;
VkSampleCountFlags
sampledImageColorSampleCounts;
P.15
VkSampleCountFlags
sampledImageIntegerSampleCounts;
P.15
VkSampleCountFlags
sampledImageDepthSampleCounts;
P.15
VkSampleCountFlags
sampledImageStencilSampleCounts;
P.15
VkSampleCountFlags storageImageSampleCounts;
P.15
uint32_t maxSampleMaskWords;
VkBool32 mestampComputeAndGraphics;
oat mestampPeriod;
uint32_t maxClipDistances;
uint32_t maxCullDistances;
uint32_t maxCombinedClipAndCullDistances;
uint32_t discreteQueuePriories;
oat pointSizeRange[2];
oat lineWidthRange[2];
oat pointSizeGranularity;
oat lineWidthGranularity;
VkBool32 strictLines;
VkBool32 standardSampleLocaons;
VkDeviceSize opmalBuerCopyOsetAlignment;
VkDeviceSize opmalBuerCopyRowPitchAlignment;
VkDeviceSize nonCoherentAtomSize;
} VkPhysicalDeviceLimits;
typedef struct VkPhysicalDeviceMaintenance3Properes {
VkStructureType sType; void* pNext;
uint32_t maxPerSetDescriptors;
VkDeviceSize maxMemoryAllocaonSize;
} VkPhysicalDeviceMaintenance3Properes;
typedef struct VkPhysicalDeviceMemoryProperes {
uint32_t memoryTypeCount; VkMemoryType
memoryTypes[VK_MAX_MEMORY_TYPES];
P.14
uint32_t memoryHeapCount; VkMemoryHeap
memoryHeaps[VK_MAX_MEMORY_HEAPS];
P.13
} VkPhysicalDeviceMemoryProperes;
typedef struct VkPhysicalDeviceMulviewFeatures {
VkStructureType sType; void* pNext;
VkBool32 mulview;
VkBool32 mulviewGeometryShader;
VkBool32 mulviewTessellaonShader;
} VkPhysicalDeviceMulviewFeatures;
typedef struct VkPhysicalDeviceMulviewProperes {
VkStructureType sType; void* pNext;
uint32_t maxMulviewViewCount;
uint32_t maxMulviewInstanceIndex;
} VkPhysicalDeviceMulviewProperes;
typedef struct VkPhysicalDevicePointClippingProperes {
VkStructureType sType; void* pNext;
VkPointClippingBehavior pointClippingBehavior;
} VkPhysicalDevicePointClippingProperes;
pointClippingBehavior:
VK_POINT_CLIPPING_BEHAVIOR_X where X is
ALL_CLIP_PLANES, USER_CLIP_PLANES_ONLY
typedef struct VkPhysicalDeviceProperes {
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;
P.14
VkPhysicalDeviceSparseProperes sparseProperes;
P.15
} VkPhysicalDeviceProperes;
deviceType:
VK_PHYSICAL_DEVICE_TYPE_X where X is
OTHER, INTEGRATED_GPU, DISCRETE_GPU,
VIRTUAL_GPU, CPU
Connued on next page >

www.khronos.org/vulkan©2018 Khronos Group - Rev. 0318
Vulkan 1.1 Quick Reference Page 15
Learn more about Vulkan
Vulkan is maintained by the Khronos Group, a worldwide
consorum of organizaons that work to create and maintain
key standards used across many industries. Visit Khronos
online for resources to help you use and master Vulkan:
Main Vulkan Resource Page:
khronos.org/vulkan/
Vulkan Registry:
khronos.org/registry/vulkan/
Forums:
forums.khronos.org
Reference Guides:
khronos.org/developers/reference-cards/
Courses:
khronos.org/developers/training/
Videos & Presentaons:
khronos.org/developers/library/
Events:
khronos.org/news/events/
Khronos Blog:
khronos.org/blog/
@thekhronosgroup khronos.org
Structures and Enumeraons (connued)
typedef struct
VkPhysicalDeviceProtectedMemoryFeatures {
VkStructureType sType; void* pNext;
VkBool32 protectedMemory;
} VkPhysicalDeviceProtectedMemoryFeatures;
typedef struct
VkPhysicalDeviceProtectedMemoryProperes {
VkStructureType sType; void* pNext;
VkBool32 protectedNoFault;
} VkPhysicalDeviceProtectedMemoryProperes;
typedef struct
VkPhysicalDeviceSamplerYcbcrConversionFeatures {
VkStructureType sType; void* pNext;
VkBool32 samplerYcbcrConversion;
} VkPhysicalDeviceSamplerYcbcrConversionFeatures;
typedef struct
VkPhysicalDeviceShaderDrawParameterFeatures {
VkStructureType sType; void* pNext;
VkBool32 shaderDrawParameters;
} VkPhysicalDeviceShaderDrawParameterFeatures;
typedef struct VkPhysicalDeviceSparseProperes {
VkBool32 residencyStandard2DBlockShape;
VkBool32 residencyStandard2DMulsampleBlockShape;
VkBool32 residencyStandard3DBlockShape;
VkBool32 residencyAlignedMipSize;
VkBool32 residencyNonResidentStrict;
} VkPhysicalDeviceSparseProperes;
typedef struct VkPhysicalDeviceSubgroupProperes {
VkStructureType sType; void* pNext;
uint32_t subgroupSize;
VkShaderStageFlags supportedStages;
P.15
VkSubgroupFeatureFlags supportedOperaons;
VkBool32 quadOperaonsInAllStages;
} VkPhysicalDeviceSubgroupProperes;
supportedOperaons:
VK_SUBGROUP_FEATURE_X_BIT where X is
ARITHMETIC, BALLOT, BASIC, CLUSTERED, QUAD, SHUFFLE,
SHUFFLE_RELATIVE, VOTE
typedef struct VkPhysicalDeviceSurfaceInfo2KHR {
VkStructureType sType; const void* pNext;
VkSurfaceKHR surface;
} VkPhysicalDeviceSurfaceInfo2KHR;
typedef struct VkPhysicalDeviceVariablePointerFeatures {
VkStructureType sType; void* pNext;
VkBool32 variablePointersStorageBuer;
VkBool32 variablePointers;
} VkPhysicalDeviceVariablePointerFeatures;
enum VkPipelineBindPoint:
VK_PIPELINE_BIND_POINT_COMPUTE,
VK_PIPELINE_BIND_POINT_GRAPHICS
enum VkPipelineCreateFlagBits:
VK_PIPELINE_CREATE_X where X is
DISABLE_OPTIMIZATION_BIT,
ALLOW_DERIVATIVES_BIT,
DERIVATIVE_BIT,
VIEW_INDEX_FROM_DEVICE_INDEX_BIT,
DISPATCH_BASE
typedef struct VkPipelineShaderStageCreateInfo {
VkStructureType sType; const void* pNext;
VkPipelineShaderStageCreateFlags ags;
= 0
VkShaderStageFlagBits stage;
P.15
VkShaderModule module;
const char* pName;
const VkSpecializaonInfo* pSpecializaonInfo;
P.15
} VkPipelineShaderStageCreateInfo;
typedef struct VkSpecializaonInfo {
uint32_t mapEntryCount;
const VkSpecializaonMapEntry* pMapEntries;
P.15
size_t dataSize; const void* pData;
} VkSpecializaonInfo;
typedef struct VkSpecializaonMapEntry {
uint32_t constantID;
uint32_t oset;
size_t size;
} VkSpecializaonMapEntry;
enum VkPipelineStageFlagBits:
VK_PIPELINE_STAGE_X_BIT where X is
TOP_OF_PIPE,
DRAW_INDIRECT,
VERTEX_[INPUT, SHADER],
TESSELLATION_[CONTROL,
EVALUATION]_SHADER,
[COMPUTE, GEOMETRY, FRAGMENT]_SHADER,
[EARLY, LATE]_FRAGMENT_TESTS,
COLOR_ATTACHMENT_OUTPUT,
TRANSFER, BOTTOM_OF_PIPE, HOST,
ALL_{GRAPHICS, COMMANDS}
typedef struct
VkPipelineTessellaonDomainOriginStateCreateInfo{
VkStructureType sType; const void* pNext;
VkTessellaonDomainOrigin domainOrigin;
} VkPipelineTessellaonDomainOriginStateCreateInfo;
domainOrigin:
VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT
VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT
typedef struct VkProtectedSubmitInfo {
VkStructureType sType;
const void* pNext;
VkBool32 protectedSubmit;
} VkProtectedSubmitInfo;
enum VkQueryPipelineStascFlagBits:
VK_QUERY_PIPELINE_STATISTIC_X_BIT where X is
INPUT_ASSEMBLY_{VERTICES, PRIMITIVES},
VERTEX_SHADER_INVOCATIONS,
GEOMETRY_SHADER_{INVOCATIONS, PRIMITIVES},
CLIPPING_{INVOCATIONS, PRIMITIVES},
FRAGMENT_SHADER_INVOCATIONS,
TESSELLATION_CONTROL_SHADER_PATCHES,
TESSELLATION_EVALUATION_SHADER_INVOCATIONS,
COMPUTE_SHADER_INVOCATIONS
typedef struct VkRect2D {
VkOset2D oset;
P14
VkExtent2D extent;
P.12
} VkRect2D;
typedef struct
VkRenderPassInputAachmentAspectCreateInfo {
VkStructureType sType; const void* pNext;
uint32_t aspectReferenceCount;
const VkInputAachmentAspectReference*
pAspectReferences;
P.13
} VkRenderPassInputAachmentAspectCreateInfo;
typedef struct VkRenderPassMulviewCreateInfo {
VkStructureType sType; const void* pNext;
uint32_t subpassCount;
const uint32_t* pViewMasks;
uint32_t dependencyCount;
const int32_t* pViewOsets;
uint32_t correlaonMaskCount;
const uint32_t* pCorrelaonMasks;
} VkRenderPassMulviewCreateInfo;
enum VkSampleCountFlagBits:
VK_SAMPLE_COUNT_X_BIT where X is
1, 2, 4, 8, 16, 32, 64
typedef struct
VkSamplerYcbcrConversionImageFormatProperes {
VkStructureType sType; void* pNext;
uint32_t combinedImageSamplerDescriptorCount;
} VkSamplerYcbcrConversionImageFormatProperes;
typedef struct VkSamplerYcbcrConversionInfo {
VkStructureType sType; const void* pNext;
VkSamplerYcbcrConversion conversion;
} VkSamplerYcbcrConversionInfo
enum VkShaderStageFlagBits:
VK_SHADER_STAGE_X where X is
{VERTEX, GEOMETRY, FRAGMENT, COMPUTE}_BIT,
TESSELLATION_CONTROL_BIT,
TESSELLATION_EVALUATION_BIT,
ALL_GRAPHICS, ALL
enum VkSharingMode:
VK_SHARING_MODE_EXCLUSIVE,
VK_SHARING_MODE_CONCURRENT
typedef struct VkSparseMemoryBind {
VkDeviceSize resourceOset;
VkDeviceSize size;
VkDeviceMemory memory;
VkDeviceSize memoryOset;
VkSparseMemoryBindFlags ags;
} VkSparseMemoryBind;
ags: VK_SPARSE_MEMORY_BIND_METADATA_BIT
typedef struct VkSurfaceCapabiliesKHR {
uint32_t minImageCount;
uint32_t maxImageCount;
VkExtent2D currentExtent;
P.12
VkExtent2D minImageExtent;
P.12
VkExtent2D maxImageExtent;
P.12
uint32_t maxImageArrayLayers;
VkSurfaceTransformFlagsKHR supportedTransforms;
P.15
VkSurfaceTransformFlagBitsKHR currentTransform;
P.15
VkCompositeAlphaFlagsKHR
supportedCompositeAlpha;
P.12
VkImageUsageFlags supportedUsageFlags;
P.13
} VkSurfaceCapabiliesKHR;
enum VkCompositeAlphaFlagBitsKHR:
VK_COMPOSITE_ALPHA_X_BIT_KHR where X is
OPAQUE, PRE_MULTIPLIED, POST_MULTIPLIED, INHERIT
typedef struct VkSurfaceFormatKHR {
VkFormat format;
P.13
VkColorSpaceKHR colorSpace;
} VkSurfaceFormatKHR;
colorSpace: VK_COLOR_SPACE_SRGB_NONLINEAR_KHR
enum VkSurfaceTransformFlagBitsKHR {
VK_SURFACE_TRANSFORM_X_BIT_KHR
where X is
IDENTITY,
ROTATE_{90, 180, 270},
HORIZONTAL_MIRROR
HORIZONTAL_MIRROR_ROTATE_{90, 180, 270},
INHERIT
typedef struct VkViewport {
oat x; oat y;
oat width; oat height;
oat minDepth; oat maxDepth;
} VkViewport;

www.khronos.org/vulkan
©2018 Khronos Group - Rev. 0318
Vulkan 1.1 Quick Reference Page 16
Reference guide producon by Miller & Mattson www.millermattson.com
Vulkan is a registered trademark of the Khronos Group. The Khronos Group is an industry
consorum creang open standards for the authoring and acceleraon of parallel
compung, graphics and dynamic media on a wide variety of plaorms and devices.
See www.khronos.org to learn more about the Khronos Group.
See www.khronos.org/vulkan to learn more about Vulkan.
Vulkan Reference Guide Index
The following index shows each item included on this card along with the page on which it is described. The color of the row in the table below is the color of the pane to which you should refer.
A - G
Android Plaorm 9
Blending 8
Buers 5
Cache Control 2
Clear Commands 7-8
Command Buers 1-2
Command Funciton Pointers 1
Command Pools 1
Compute Pipelines 3
Copy Commands 8
Depth Bias 8
Depth Bounds 8
Descriptors, Resource 6-7
Devices 1
Dispatching Commands 8
Display Enumeraon 9
Drawing Commands 8
Enumeraons 12-15
Events 2
Extensions 10
Fences 2
Format Properes 11
Fragment Operaons 8
Framebuers 3
Graphics Pipelines 3
I - R
Image Capabilies 11
Image Views 6
Images 5
Instances 1
Layers 10
Line Width 8
Memory Allocaon 4
Pipeline Barriers 2
Pipeline Layouts 6
Pipelines 3-4
Queries 7
Queues 1
Rasterizaon 8
Render Pass 3
Resource Creaon 5-6
Resource Descriptors 6-7
Return Codes 1
S - V
Samplers 6
Scissor Test 8
Semaphores 2
Shaders 3
Sparse Resources 8-9
Stencil Test 8
Structures 12-15
Synchronizaon 2
Timestamp Queries 7
Variables, Built-in 3
Vertex Input Descripon 8
Viewport 8
vkA - vkCl
vkAcquireNextImage* 10
VkAcquireNextImageInfoKHR 10
vkAllocateCommandBuers 2
vkAllocateDescriptorSets 7
vkAllocateMemory 4
VkAndroidSurfaceCreateInfoKHR 9
VkApplicaonInfo 1
VkAachment* 3
vkBeginCommandBuer 2
vkBind{Buer, Image}Memory* 6
VkBindImageMemoryInfo 6
VkBindSparseInfo 9
VkBuer[Image]Copy 8
VkBuer[View]CreateInfo 5
VkBuerMemoryRequirementsInfo2 6
VkClear{Aachment, Rect} 7
vkCm
vkCmd{Set, Reset}Event 2
vkCmdBeginQuery 7
vkCmdBeginRenderPass 3
vkCmdBindDescriptorSets 7
vkCmdBindIndexBuer 8
vkCmdBindPipeline 4
vkCmdBindVertexBuers 8
vkCmdBlitImage 8
vkCmdClearAachments 7
vkCmdClearColorImage 7
vkCmdClearDepthStencilImage 7
vkCmdCopyBuer[ToImage] 8
vkCmdCopyImage[ToBuer] 8
vkCmdCopyQueryPoolResults 7
vkCmdDispatch* 8
vkCmdDraw[Indirect] 8
vkCmdDrawIndexed[Indirect] 8
vkCmdEndQuery 7
vkCmdEndRenderPass 3
vkCmdExecuteCommands 2
vkCmdFillBuer 8
vkCmdNextSubpass 3
vkCmdPipelineBarrier 2
vkCmdPushConstants 7
vkCmdResetQueryPool 7
vkCmdResolveImage 8
vkCmdSetBlendConstants 8
vkCmdSetDepthBias 8
vkCmdSetDepthBounds 8
vkCmdSetDeviceMask 2
vkCmdSetLineWidth 8
vkCmdSetScissor 8
vkCmdSetStencil{Compare, Write}Mask 8
vkCmdSetStencilReference 8
vkCmdSetViewport 8
vkCmdUpdateBuer 8
vkCmdWaitEvents 2
vkCmdWriteTimestamp 7
VkCo - vkCr
VkCommandBuer* 2
VkCommandPoolCreateInfo 1
VkComponentMapping 6
VkComputePipelineCreateInfo 3
VkCopyDescriptorSet 7
vkCreate{Event, Fence} 2
vkCreateAndroidSurfaceKHR 9
vkCreateBuer[View] 5
vkCreateCommandPool 1
vkCreateComputePipelines 3
vkCreateDescriptorPool 6
vkCreateDescriptorSetLayout 6
vkCreateDescriptorUpdateTemplate 7
vkCreateDevice 1
vkCreateDisplayModeKHR 9
vkCreateDisplayPlaneSurfaceKHR 9
vkCreateFramebuer 3
vkCreateGraphicsPipelines 3
vkCreateImage 5
vkCreateImageView 6
vkCreateInstance 1
vkCreatePipelineCache 4
vkCreatePipelineLayout 6
vkCreateQueryPool 7
vkCreateRenderPass 3
vkCreateSampler[YcbcrConversion] 6
vkCreateSemaphore 2
vkCreateShaderModule 3
vkCreateSharedSwapchainsKHR 10
vkCreateSwapchainKHR 10
vkCreateWaylandSurfaceKHR 9
vkCreateWin32SurfaceKHR 9
vkCreateXcbSurfaceKHR 9
vkCreateXlibSurfaceKHR 9
VkDesc - vkDest
VkDescriptor{Buer, Image}Info 7
VkDescriptorPool* 7
VkDescriptorSetAllocateInfo 7
VkDescriptorSetLayoutSupport 6
VkDescriptorUpdateTemplate* 7
vkDestroy{Event, Fence} 2
vkDestroyBuer[View] 5
vkDestroyCommandPool 1
vkDestroyDescriptorPool 7
vkDestroyDescriptorSetLayout 6
vkDestroyDescriptorUpdateTemplate 7
vkDestroyDevice 1
vkDestroyFramebuer 3
vkDestroyImage[View] 6
vkDestroyInstance 1
vkDestroyPipeline[Cache] 4
vkDestroyPipelineLayout 6
vkDestroyQueryPool 7
vkDestroyRenderPass 3
vkDestroySampler[YcbcrConversion] 6
vkDestroySemaphore 2
vkDestroyShaderModule 3
vkDestroySurfaceKHR 9
vkDestroySwapchainKHR 10
VkDev - vkF
VkDevice[GroupDevice]CreateInfo 1
VkDeviceGroupPresentCapabiliesKHR 10
VkDeviceGroupPresentInfoKHR 10
VkDeviceGroupSwapchainCreateInfoKHR 10
VkDeviceQueue[Create]Info* 1
vkDeviceWaitIdle 2
VkDispatchIndirectCommand 8
VkDisplayMode* 9
VkDisplayPlane* 9
VkDisplayPresentInfoKHR 10
VkDisplayProperesKHR 9
VkDisplaySurfaceCreateInfoKHR 9
VkDraw[Indexed]IndirectCommand 8
vkEndCommandBuer 2
vkEnumerateDevice* 10
vkEnumerateInstance* 10
vkEnumerateInstanceVersion 1
vkEnumeratePhysicalDevice* 1
Vk{Event, Fence}CreateInfo 2
VkExtensionProperes 11
VkExternalBuerProperes 11
VkExternalFenceProperes 11
VkExternalSemaphoreProperes 11
vkFlushMappedMemoryRanges 4
VkFormatProperes* 11
VkFramebuerCreateInfo 3
vkFreeCommandBuers 2
vkFreeDescriptorSets 7
vkFreeMemory 4
vkG
vkGet{Event, Fence}Status 2
vkGetBuerMemoryRequirements* 6
vkGetDescriptorSetLayoutSupport 6
vkGetDeviceGroupPeerMemoryFeatures 4
vkGetDeviceGroupPresentCapabiliesKHR 10
vkGetDeviceGroupSurfacePresentModesKHR 10
vkGetDeviceMemoryCommitment 4
vkGetDeviceProcAddr 1
vkGetDeviceQueue* 1
vkGetDisplayModeProperesKHR 9
vkGetDisplayPlaneCapabiliesKHR 9
vkGetDisplayPlaneSupportedDisplaysKHR 9
vkGetImageMemoryRequirements* 6
vkGetImageSparseMemoryRequirements* 9
vkGetImageSubresourceLayout 5
vkGetInstanceProcAddr 1
vkGetPhysicalDeviceDisplay[Plane]ProperesKHR 9
vkGetPhysicalDeviceExternalBuerProperes 11
vkGetPhysicalDeviceExternalFenceProperes 11
vkGetPhysicalDeviceExternalSemaphoreProperes 11
vkGetPhysicalDeviceFeatures* 11
vkGetPhysicalDeviceFormatProperes* 11
vkGetPhysicalDeviceImageFormatProperes* 11
vkGetPhysicalDeviceMemoryProperes* 4
vkGetPhysicalDevicePresentRectanglesKHR 10
vkGetPhysicalDeviceProperes* 1
vkGetPhysicalDeviceQueueFamilyProperes* 1
vkGetPhysicalDeviceSparseImageFormat* 8
vkGetPhysicalDeviceSurface* 10
vkGetPhysicalDeviceWaylandPresentaonSupport* 10
vkGetPhysicalDeviceWin32PresentaonSupport* 10
vkGetPhysicalDeviceXcbPresentaonSupportKHR 10
vkGetPhysicalDeviceXlibPresentaonSupportKHR 10
vkGetPipelineCacheData 4
vkGetQueryPoolResults 7
vkGetRenderAreaGranularity 3
vkGetSwapchain* 10
VkGr-VkP
VkGraphicsPipelineCreateInfo 3
VkImageBlit 8
VkImageCopy 8
VkImageCreateInfo 5
VkImageFormatProperes* 11
VkImageMemoryRequirementsInfo2 6
VkImageResolve 8
VkImageSparseMemoryRequirementsInfo2 9
VkImageSubresource 5
VkImageSwapchainCreateInfoKHR 5
VkImageViewCreateInfo 6
VkInstanceCreateInfo 1
vkInvalidateMappedMemoryRanges 4
VkLayerProperes 10
vkMapMemory 4
VkMappedMemoryRange 4
VkMemoryAllocateInfo 4
vkMergePipelineCaches 4
VkPhysicalDeviceExternalBuerInfo 11
VkPhysicalDeviceExternalFenceInfo 11
VkPhysicalDeviceExternalSemaphoreInfo 11
VkPhysicalDevice[Group]Properes* 1
VkPhysicalDeviceImageFormatInfo2 11
VkPhysicalDeviceMemoryProperes2 4
VkPhysicalDeviceSparseImageFormatInfo2 9
VkPipelineCacheCreateInfo 4
VkPipelineColorBlend* 4
VkPipelineDepthStencilStateCreateInfo 4
VkPipelineDynamicStateCreateInfo 4
VkPipelineInputAssemblyStateCreateInfo 4
VkPipelineLayoutCreateInfo 6
VkPipelineMulsampleStateCreateInfo 4
VkPipelineRasterizaonStateCreateInfo 4
VkPipelineTessellaonStateCreateInfo 4
VkPipelineVertexInputStateCreateInfo 3
VkPipelineViewportStateCreateInfo 4
VkPr-VkSt
VkPresentInfoKHR 10
VkPresentRegion[s]KHR 10
VkPushConstantRange 6
VkQueryPoolCreateInfo 7
vkQueueBindSparse 9
VkQueueFamilyProperes* 1
vkQueuePresentKHR 10
vkQueueSubmit 2
vkQueueWaitIdle 2
VkRectLayerKHR 10
VkRenderPass{Begin, Create}Info 3
vkResetCommandBuer 2
vkResetCommandPool 1
vkResetDescriptorPool 7
vkResetFences 2
VkSampler[YcbcrConversion]CreateInfo 6
VkSemaphoreCreateInfo 2
vk{Set, Reset}Event 2
VkShaderModuleCreateInfo 3
VkSharedPresentSurfaceCapabiliesKHR 10
VkSparseBuerMemoryBindInfo 9
VkSparseImageFormatProperes* 8
VkSparseImage[Opaque]Memory* 9
VkStencilOpState 4
VkSu - W
VkSubmitInfo 2
VkSubpass* 3
VkSubresourceLayout 6
VkSurface* 10
VkSwapchainCreateInfoKHR 10
vkTrimCommandPool 1
vkUnmapMemory 4
vkUpdateDescriptorSet* 7
VkVertexInputAributeDescripon 4
VkVertexInputBindingDescripon 3
vkWaitForFences 2
VkWaylandSurfaceCreateInfoKHR 9
VkWin32SurfaceCreateInfoKHR 9
VkWriteDescriptorSet 7
VkXcbSurfaceCreateInfoKHR 9
VkXlibSurfaceCreateInfoKHR 9
Wait Idle Operaons 2
WSI (Window System Integraon) 9-10