Vulkan is currently WIP. Many samples, and applications work correctly, but some bugs may still be present.
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
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.
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.
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 | ✅ | ✅ | ➖ |