Data graphs

Data graph pipelines encapsulate computational graphs that operate on whole resources (e.g. tensors). The graph operations that form these computational graphs are executed by graph processing engines.

Pipeline Creation

vkCreateDataGraphPipelinesARMCreate data graph pipeline objects
VkDataGraphPipelineCreateInfoARMStructure specifying parameters of a newly created data graph pipeline
VkDataGraphPipelineShaderModuleCreateInfoARMStructure specifying shader module parameters of a newly created data graph pipeline
VkDataGraphPipelineIdentifierCreateInfoARMStructure specifying an identifier for the newly created data graph pipeline
VkDataGraphPipelineBuiltinModelCreateInfoQCOMStructure specifying a built-in model for the newly created data graph pipeline
VkDataGraphPipelineCompilerControlCreateInfoARMStructure specifying compiler control parameters of a newly created data graph pipeline
VkDataGraphPipelineConstantARMStructure specifying parameters of a data graph pipeline constant
VkDataGraphPipelineConstantTensorSemiStructuredSparsityInfoARMStructure specifying semi-structured sparsity parameters of a tensor data graph pipeline constant
VkDataGraphPipelineResourceInfoARMStructure specifying parameters of a data graph pipeline resource
VkDataGraphPipelineResourceInfoImageLayoutARMStructure specifying parameters of a graph pipeline image resource
VkDataGraphPipelineSingleNodeCreateInfoARMStructure specifying parameters of a newly-created single fixed-function node graph pipeline
VkDataGraphPipelineNodeTypeARMEnumeration describing the type of a data graph pipeline node
VkDataGraphPipelineSingleNodeConnectionARMStructure describing a single connection between a data graph node and the pipeline layout of a graph pipeline
VkDataGraphPipelineNodeConnectionTypeARMConnection points for a fixed-function data graph node

Sessions

Graph pipelines execute within data graph pipeline sessions that provide a context for their execution as well as binding points for the memory they need (e.g. transient storage).

VkDataGraphPipelineSessionARMOpaque handle to a data graph pipeline session object
vkCreateDataGraphPipelineSessionARMCreate a data graph pipeline session
VkDataGraphPipelineSessionCreateInfoARMStructure specifying parameters of a newly created data graph pipeline session
VkDataGraphPipelineSessionCreateFlagBitsARMBitmask specifying additional parameters of a data graph pipeline session
VkDataGraphPipelineSessionCreateFlagsARMBitmask of VkDataGraphPipelineSessionCreateFlagBitsARM
vkGetDataGraphPipelineSessionBindPointRequirementsARMGet the bind point requirements of a data graph pipeline session
VkDataGraphPipelineSessionBindPointRequirementsInfoARMStructure specifying info to query the bind point requirements of a data graph pipeline session
VkDataGraphPipelineSessionBindPointRequirementARMStructure specifying the requirements of a bind point of a data graph pipeline session
VkDataGraphPipelineSessionBindPointARMEnumeration describing the bind points of a data graph pipeline session
VkDataGraphPipelineSessionBindPointTypeARMEnumeration describing the type of bind points of a data graph pipeline session
vkGetDataGraphPipelineSessionMemoryRequirementsARMGet the memory requirements of a data graph pipeline session
VkDataGraphPipelineSessionMemoryRequirementsInfoARMStructure specifying parameters to query the memory requirements of a data graph pipeline session
vkBindDataGraphPipelineSessionMemoryARMBind device memory to a data graph pipeline session object
VkBindDataGraphPipelineSessionMemoryInfoARMStructure describing how to bind a data graph pipeline session to memory
vkDestroyDataGraphPipelineSessionARMDestroy a data graph pipeline session object

Dispatch

vkCmdDispatchDataGraphARMDispatch a data graph pipeline within a session
VkDataGraphPipelineDispatchInfoARMStructure specifying parameters of a data graph pipeline dispatch
VkDataGraphPipelineDispatchFlagBitsARMBitmask specifying additional parameters of a data graph pipeline dispatch
VkDataGraphPipelineDispatchFlagsARMBitmask of VkDataGraphPipelineDispatchFlagBitsARM

Properties

vkGetDataGraphPipelineAvailablePropertiesARMQuery available properties of a data graph pipeline
vkGetDataGraphPipelinePropertiesARMQuery properties of a data graph pipeline
VkDataGraphPipelineInfoARMStructure describing a data graph pipeline
VkDataGraphPipelinePropertyQueryResultARMStructure describing a data graph pipeline property query or result
VkDataGraphPipelinePropertyARMEnumeration describing the properties of a data graph pipeline that can be queried

Processing Engines

Data graph pipelines execute on one or more data graph processing engines. Each queue family of a VkPhysicalDevice that supports VK_QUEUE_DATA_GRAPH_BIT_ARM may provide access to processing engines. Processing engines may be foreign. Foreign processing engines require the use of external memory and semaphores to exchange data and synchronize with data graph pipelines that target them. Each processing engine may support a selection of graph operations. There exists a default processing engine that enables implementations to support some operations without tying support to specific processing engines. This allows implementations to avoid being specific about the processing engines that they use internally or to remove the necessity for applications to choose the specific processing engine used to execute a given set of operations.

vkGetPhysicalDeviceQueueFamilyDataGraphProcessingEnginePropertiesARMQuery the properties of a data graph processing engine for a specific queue family of a physical device
VkPhysicalDeviceQueueFamilyDataGraphProcessingEngineInfoARMStructure specifying a data graph processing engine type and queue family to query
VkQueueFamilyDataGraphProcessingEnginePropertiesARMStructure describing the properties of a data graph processing engine type for a given queue family
VkPhysicalDeviceDataGraphProcessingEngineARMStructure describing a data graph processing engine supported by a physical device
VkPhysicalDeviceDataGraphProcessingEngineTypeARMEnumeration describing data graph processing engines
VkDataGraphProcessingEngineCreateInfoARMStructure describing a collection of data graph processing engines for which the object being created is specialized

Operations

Data graph processing engines execute data graph operations. Operations may be of a fixed-function nature, configurable or not, or may , for example, be provided as part of a SPIR-V extended instruction set.

vkGetPhysicalDeviceQueueFamilyDataGraphPropertiesARMQuery the data processing engines and the operations they support for a given queue family of a physical device
VkQueueFamilyDataGraphPropertiesARMStructure describing a data graph processing engine and operation it supports
VkPhysicalDeviceDataGraphOperationSupportARMStructure describing an operation or set of operations supported by a data graph processing engine
VK_MAX_PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_SET_NAME_SIZE_ARMLength of a data graph operation name string
VkPhysicalDeviceDataGraphOperationTypeARMEnumeration describing data graph operations
vkGetPhysicalDeviceQueueFamilyDataGraphEngineOperationPropertiesARMQuery the properties of a data graph processing engine and operation set combination for a specific queue family of a physical device

Data Graph Operations Requirements

Physical devices that support the dataGraphShaderModule feature must support an operation whose VkPhysicalDeviceDataGraphOperationSupportARM::operationType is VK_PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_TYPE_SPIRV_EXTENDED_INSTRUCTION_SET_ARM and name and version are as described in the following table for at least one processing engine in at least one queue family when specific extensions are supported at a specific version:

ExtensionExtension specification versionOperation nameOperation version
VK_ARM_data_graph_instruction_set_tosa1TOSA.001000.10

Physical devices that support VK_ARM_data_graph_optical_flow must support the following VkPhysicalDeviceDataGraphOperationSupportARM for at least one processing engine in at least one queue family:

  • operationType: VK_PHYSICAL_DEVICE_DATA_GRAPH_OPERATION_TYPE_OPTICAL_FLOW_ARM
  • name: OpticalFlow
  • version: 1

TOSA

VkQueueFamilyDataGraphTOSAPropertiesARMStructure describing the TOSA properties of a processing engine and operation set for a specific queue family of a physical device
VkDataGraphTOSANameQualityARMStructure describing the name and quality level of a TOSA profile or extension
VK_MAX_DATA_GRAPH_TOSA_NAME_SIZE_ARMLength of a data graph TOSA profile or extension name string
VkDataGraphTOSAQualityFlagBitsARMBits specifying quality properties for a TOSA profile or extension
VkDataGraphTOSAQualityFlagsARMBitmask of VkDataGraphTOSAQualityFlagBitsARM
VkDataGraphTOSALevelARMEnumeration describing a data graph TOSA level

Optical flow

An optical flow fixed-function node in a graph calculates the forward optical flow between an input image and a reference image. An output flow vector (Vx, Vy) means that current pixel (x, y) of the input image can be found at location (x+Vx, y+Vy) in the reference image.

An optical flow fixed function nodes have the following graph node connection points:

  • VK_DATA_GRAPH_PIPELINE_NODE_CONNECTION_TYPE_OPTICAL_FLOW_INPUT_ARM
  • VK_DATA_GRAPH_PIPELINE_NODE_CONNECTION_TYPE_OPTICAL_FLOW_REFERENCE_ARM
  • VK_DATA_GRAPH_PIPELINE_NODE_CONNECTION_TYPE_OPTICAL_FLOW_HINT_ARM
  • VK_DATA_GRAPH_PIPELINE_NODE_CONNECTION_TYPE_OPTICAL_FLOW_FLOW_VECTOR_ARM
  • VK_DATA_GRAPH_PIPELINE_NODE_CONNECTION_TYPE_OPTICAL_FLOW_COST_ARM
VkQueueFamilyDataGraphOpticalFlowPropertiesARMStructure describing optical flow properties of a processing engine and operation set for a specific queue family of a physical device

Image formats

vkGetPhysicalDeviceQueueFamilyDataGraphOpticalFlowImageFormatsARMQuery image formats for data graph optical flow
VkDataGraphOpticalFlowImageFormatInfoARMStructure describing data graph optical flow image format info
VkDataGraphOpticalFlowImageUsageFlagBitsARMBits specifying image usage for optical flow operations
VkDataGraphOpticalFlowImageUsageFlagsARMBitmask of VkDataGraphOpticalFlowImageUsageFlagBitsARM
VkDataGraphOpticalFlowImageFormatPropertiesARMStructure describing properties of an optical flow image format

Pipeline creation

VkDataGraphPipelineOpticalFlowCreateInfoARMStructure specifying the parameters of a newly-created optical flow graph pipeline
VkDataGraphOpticalFlowGridSizeFlagBitsARMBits specifying grid sizes for optical flow operations
VkDataGraphOpticalFlowGridSizeFlagsARMBitmask of VkDataGraphOpticalFlowGridSizeFlagBitsARM
VkDataGraphOpticalFlowPerformanceLevelARMOptical flow performance level types
VkDataGraphOpticalFlowCreateFlagBitsARMBits specifying flags for newly created optical flow data graph node
VkDataGraphOpticalFlowCreateFlagsARMBitmask of VkDataGraphOpticalFlowCreateFlagBitsARM

Pipeline dispatch

VkDataGraphPipelineOpticalFlowDispatchInfoARMStructure specifying parameters of a optical flow vector calculation
VkDataGraphOpticalFlowExecuteFlagBitsARMBits specifying flags for a optical flow vector calculation
VkDataGraphOpticalFlowExecuteFlagsARMBitmask of VkDataGraphOpticalFlowExecuteFlagBitsARM