Vulkan Status
Trace and Replay
Vulkan is currently WIP. Many samples, and applications work correctly, but some
bugs may still be present.
Mid-Execution Capture
Mid-Execution capture allows an application to be traced starting at an arbitrary point in time.
If tracing from the command line this can be done with
gapit trace -start-defer
When using the GUI, this can be acheived by unchecking
Trace from Beginning
Subcommands
When visualizing the tree of Commands, every VkQueueSubmit is expanded into
a list of the commands that are run during that submission. From there you can
query information about any call in the program.
We are still tuning performance for Vulkan in GAPID. For Posix based platforms
we handle persistently mapped coherent memory efficiently, but for Windows this
is currently in progress. Large blocks of mapped coherent memory can greatly
reduce replay performance and increase trace size.
Test applications
We use a set of Test Applications to validate
whether or not Vulkan support is functioning. This repository contains
applications that use most parts of the API, and will be expanded as more interesting and tricky
uses of the API are found.
Current Support
The current status of support for the Vulkan API on a method by method basis
are as follows.
| Command Name |
Capture |
Mid-Execution |
Subcommands |
| vkAllocateCommandBuffers |
✅ |
✅ |
➖ |
| vkCreateDevice |
✅ |
✅ |
➖ |
| vkCreateInstance |
✅ |
✅ |
➖ |
| vkDestroyDevice |
✅ |
✅ |
➖ |
| vkDestroyInstance |
✅ |
✅ |
➖ |
| vkEnumerateDeviceExtensionProperties |
✅ |
➖ |
➖ |
| vkEnumerateDeviceLayerProperties |
✅ |
➖ |
➖ |
| vkEnumerateInstanceExtensionProperties |
✅ |
➖ |
➖ |
| vkEnumerateInstanceLayerProperties |
✅ |
➖ |
➖ |
| vkEnumeratePhysicalDevices |
✅ |
➖ |
➖ |
| vkFreeCommandBuffers |
✅ |
✅ |
➖ |
| vkGetDeviceProcAddr |
✅ |
➖ |
➖ |
| vkGetDeviceQueue |
✅ |
✅ |
➖ |
| vkGetInstanceProcAddr |
✅ |
➖ |
➖ |
| vkGetPhysicalDeviceSparseImageFormatProperties |
✅ |
➖ |
➖ |
| vkGetPhysicalDeviceFeatures |
✅ |
➖ |
➖ |
| vkGetPhysicalDeviceFormatProperties |
✅ |
➖ |
➖ |
| vkGetPhysicalDeviceImageFormatProperties |
✅ |
➖ |
➖ |
| vkGetPhysicalDeviceMemoryProperties |
✅ |
➖ |
➖ |
| vkGetPhysicalDeviceProperties |
✅ |
➖ |
➖ |
| vkGetPhysicalDeviceQueueFamilyProperties |
✅ |
➖ |
➖ |
| vkAcquireNextImageKHR |
✅ |
➖ |
➖ |
| vkAllocateDescriptorSets |
✅ |
✅ |
➖ |
| vkAllocateMemory |
✅ |
✅ |
➖ |
| vkBeginCommandBuffer |
✅ |
✅ |
➖ |
| vkBindBufferMemory |
✅ |
✅ |
➖ |
| vkBindImageMemory |
✅ |
✅ |
➖ |
| vkCmdBeginQuery |
✅ |
✅ |
✅ |
| vkCmdBeginRenderPass |
✅ |
✅ |
✅ |
| vkCmdBindDescriptorSets |
✅ |
✅ |
✅ |
| vkCmdBindIndexBuffer |
✅ |
✅ |
✅ |
| vkCmdBindPipeline |
✅ |
✅ |
✅ |
| vkCmdBindVertexBuffers |
✅ |
✅ |
✅ |
| vkCmdBlitImage |
✅ |
✅ |
✅ |
| vkCmdClearAttachments |
✅ |
✅ |
✅ |
| vkCmdClearColorImage |
✅ |
✅ |
✅ |
| vkCmdClearDepthStencilImage |
✅ |
✅ |
✅ |
| vkCmdCopyBuffer |
✅ |
✅ |
✅ |
| vkCmdCopyBufferToImage |
✅ |
✅ |
✅ |
| vkCmdCopyImage |
✅ |
✅ |
✅ |
| vkCmdCopyImageToBuffer |
✅ |
✅ |
✅ |
| vkCmdCopyQueryPoolResults |
✅ |
✅ |
✅ |
| vkCmdDispatch |
✅ |
✅ |
✅ |
| vkCmdDispatchIndirect |
✅ |
✅ |
✅ |
| vkCmdDraw |
✅ |
✅ |
✅ |
| vkCmdDrawIndexed |
✅ |
✅ |
✅ |
| vkCmdDrawIndexedIndirect |
✅ |
✅ |
✅ |
| vkCmdDrawIndirect |
✅ |
✅ |
✅ |
| vkCmdEndQuery |
✅ |
✅ |
✅ |
| vkCmdEndRenderPass |
✅ |
✅ |
✅ |
| vkCmdExecuteCommands |
✅ |
✅ |
◻ |
| vkCmdFillBuffer |
✅ |
✅ |
✅ |
| vkCmdNextSubpass |
✅ |
✅ |
✅ |
| vkCmdPipelineBarrier |
✅ |
✅ |
✅ |
| vkCmdPushConstants |
✅ |
✅ |
✅ |
| vkCmdResetEvent |
✅ |
✅ |
✅ |
| vkCmdResetQueryPool |
✅ |
✅ |
✅ |
| vkCmdResolveImage |
✅ |
✅ |
✅ |
| vkCmdSetBlendConstants |
✅ |
✅ |
✅ |
| vkCmdSetDepthBias |
✅ |
✅ |
✅ |
| vkCmdSetDepthBounds |
✅ |
✅ |
✅ |
| vkCmdSetEvent |
✅ |
✅ |
✅ |
| vkCmdSetLineWidth |
✅ |
✅ |
✅ |
| vkCmdSetScissor |
✅ |
✅ |
✅ |
| vkCmdSetStencilCompareMask |
✅ |
✅ |
✅ |
| vkCmdSetStencilReference |
✅ |
✅ |
✅ |
| vkCmdSetStencilWriteMask |
✅ |
✅ |
✅ |
| vkCmdSetViewport |
✅ |
✅ |
✅ |
| vkCmdUpdateBuffer |
✅ |
✅ |
✅ |
| vkCmdWaitEvents |
✅ |
✅ |
✅ |
| vkCmdWriteTimestamp |
✅ |
✅ |
✅ |
| vkCreateAndroidSurfaceKHR |
✅ |
✅ |
➖ |
| vkCreateBuffer |
✅ |
✅ |
➖ |
| vkCreateBufferView |
✅ |
✅ |
➖ |
| vkCreateCommandPool |
✅ |
✅ |
➖ |
| vkCreateComputePipelines |
✅ |
✅ |
➖ |
| vkCreateDescriptorPool |
✅ |
✅ |
➖ |
| vkCreateDescriptorSetLayout |
✅ |
✅ |
➖ |
| vkCreateDisplayModeKHR |
◻ |
◻ |
➖ |
| vkCreateDisplayPlaneSurfaceKHR |
◻ |
◻ |
➖ |
| vkCreateEvent |
✅ |
✅ |
➖ |
| vkCreateFramebuffer |
✅ |
✅ |
➖ |
| vkCreateGraphicsPipelines |
✅ |
✅ |
➖ |
| vkCreateImage |
✅ |
✅ |
➖ |
| vkCreateImageView |
✅ |
✅ |
➖ |
| vkCreateMirSurfaceKHR |
✅ |
✅ |
➖ |
| vkCreatePipelineCache |
✅ |
✅ |
➖ |
| vkCreatePipelineLayout |
✅ |
✅ |
➖ |
| vkCreateQueryPool |
✅ |
✅ |
➖ |
| vkCreateRenderPass |
✅ |
✅ |
➖ |
| vkCreateSampler |
✅ |
✅ |
➖ |
| vkCreateSemaphore |
✅ |
✅ |
➖ |
| vkCreateShaderModule |
✅ |
✅ |
➖ |
| vkCreateSharedSwapchainsKHR |
◻ |
◻ |
➖ |
| vkCreateSwapchainKHR |
✅ |
✅ |
➖ |
| vkCreateWaylandSurfaceKHR |
✅ |
✅ |
➖ |
| vkCreateWin32SurfaceKHR |
✅ |
✅ |
➖ |
| vkCreateXcbSurfaceKHR |
✅ |
✅ |
➖ |
| vkCreateXlibSurfaceKHR |
✅ |
✅ |
➖ |
| vkDestroyBuffer |
✅ |
✅ |
➖ |
| vkDestroyBufferView |
✅ |
✅ |
➖ |
| vkDestroyCommandPool |
✅ |
✅ |
➖ |
| vkDestroyDescriptorPool |
✅ |
✅ |
➖ |
| vkDestroyDescriptorSetLayout |
✅ |
✅ |
➖ |
| vkDestroyEvent |
✅ |
✅ |
➖ |
| vkDestroyFramebuffer |
✅ |
✅ |
➖ |
| vkDestroyImage |
✅ |
✅ |
➖ |
| vkDestroyImageView |
✅ |
✅ |
➖ |
| vkDestroyPipeline |
✅ |
✅ |
➖ |
| vkDestroyPipelineCache |
✅ |
✅ |
➖ |
| vkDestroyPipelineLayout |
✅ |
✅ |
➖ |
| vkDestroyQueryPool |
✅ |
✅ |
➖ |
| vkDestroyRenderPass |
✅ |
✅ |
➖ |
| vkDestroySampler |
✅ |
✅ |
➖ |
| vkDestroySemaphore |
✅ |
✅ |
➖ |
| vkDestroyShaderModule |
✅ |
✅ |
➖ |
| vkDestroySwapchainKHR |
✅ |
✅ |
➖ |
| vkDeviceWaitIdle |
✅ |
✅ |
➖ |
| vkEndCommandBuffer |
✅ |
✅ |
➖ |
| vkFlushMappedMemoryRanges |
✅ |
➖ |
➖ |
| vkFreeDescriptorSets |
✅ |
✅ |
➖ |
| vkFreeMemory |
✅ |
✅ |
➖ |
| vkGetBufferMemoryRequirements |
✅ |
➖ |
➖ |
| vkGetDeviceMemoryCommitment |
◻ |
➖ |
➖ |
| vkGetDisplayModePropertiesKHR |
◻ |
➖ |
➖ |
| vkGetDisplayPlaneCapabilitiesKHR |
◻ |
➖ |
➖ |
| vkGetDisplayPlaneSupportedDisplaysKHR |
◻ |
➖ |
➖ |
| vkGetEventStatus |
✅ |
➖ |
➖ |
| vkGetFenceStatus |
✅ |
➖ |
➖ |
| vkGetImageMemoryRequirements |
✅ |
➖ |
➖ |
| vkGetImageSparseMemoryRequirements |
✅ |
➖ |
➖ |
| vkGetImageSubresourceLayout |
✅ |
➖ |
➖ |
| vkGetPhysicalDeviceDisplayPlanePropertiesKHR |
◻ |
➖ |
➖ |
| vkGetPhysicalDeviceDisplayPropertiesKHR |
◻ |
➖ |
➖ |
| vkGetPhysicalDeviceMirPresentationSupportKHR |
✅ |
➖ |
➖ |
| vkGetPhysicalDeviceSurfaceCapabilitiesKHR |
✅ |
➖ |
➖ |
| vkGetPhysicalDeviceSurfaceFormatsKHR |
✅ |
➖ |
➖ |
| vkGetPhysicalDeviceSurfacePresentModesKHR |
✅ |
➖ |
➖ |
| vkGetPhysicalDeviceSurfaceSupportKHR |
✅ |
➖ |
➖ |
| vkGetPhysicalDeviceWaylandPresentationSupportKHR |
✅ |
➖ |
➖ |
| vkGetPhysicalDeviceWin32PresentationSupportKHR |
✅ |
➖ |
➖ |
| vkGetPhysicalDeviceXcbPresentationSupportKHR |
✅ |
➖ |
➖ |
| vkGetPhysicalDeviceXlibPresentationSupportKHR |
✅ |
➖ |
➖ |
| vkGetPipelineCacheData |
✅ |
➖ |
➖ |
| vkGetQueryPoolResults |
✅ |
➖ |
➖ |
| vkGetRenderAreaGranularity |
✅ |
➖ |
➖ |
| vkGetSwapchainImagesKHR |
✅ |
➖ |
➖ |
| vkInvalidateMappedMemoryRanges |
✅ |
➖ |
➖ |
| vkMapMemory |
✅ |
✅ |
➖ |
| vkMergePipelineCaches |
✅ |
➖ |
➖ |
| vkQueueBindSparse |
◻ |
◻ |
➖ |
| vkQueuePresentKHR |
✅ |
➖ |
➖ |
| vkQueueSubmit |
✅ |
✅ |
➖ |
| vkQueueWaitIdle |
✅ |
➖ |
➖ |
| vkResetCommandBuffer |
✅ |
✅ |
➖ |
| vkResetCommandPool |
✅ |
✅ |
➖ |
| vkResetDescriptorPool |
✅ |
✅ |
➖ |
| vkResetEvent |
✅ |
✅ |
➖ |
| vkResetFences |
✅ |
✅ |
➖ |
| vkSetEvent |
✅ |
✅ |
➖ |
| vkUnmapMemory |
✅ |
✅ |
➖ |
| vkUpdateDescriptorSets |
✅ |
✅ |
➖ |
| vkWaitForFences |
✅ |
➖ |
➖ |
| vkCreateFence |
✅ |
✅ |
➖ |
| vkDestroyFence |
✅ |
✅ |
➖ |
| vkDestroySurfaceKHR |
✅ |
✅ |
➖ |