OpenVX Graph Pipelining Extension
950f130

Data Structures  
struct  vx_graph_parameter_queue_params_t 
Macros  
#define  VX_LIBRARY_KHR_PIPELINING_EXTENSION (0x1) 
Enumerations  
enum  vx_graph_schedule_mode_enum_e 
enum  vx_graph_schedule_mode_type_e 
enum  vx_graph_attribute_pipelining_e 
Functions  
vx_status  vxSetGraphScheduleConfig (vx_graph graph, vx_enum graph_schedule_mode, uint32_t graph_parameters_list_size, const vx_graph_parameter_queue_params_t graph_parameters_queue_params_list[]) 
vx_status  vxGraphParameterEnqueueReadyRef (vx_graph graph, vx_uint32 graph_parameter_index, vx_reference *refs, vx_uint32 num_refs) 
vx_status  vxGraphParameterDequeueDoneRef (vx_graph graph, vx_uint32 graph_parameter_index, vx_reference *refs, vx_uint32 max_refs, vx_uint32 *num_refs) 
vx_status  vxGraphParameterCheckDoneRef (vx_graph graph, vx_uint32 graph_parameter_index, vx_uint32 *num_refs) 
This section lists the APIs required for graph pipelining and batch processing.
struct vx_graph_parameter_queue_params_t 
Queueing parameters for a specific graph parameter.
See vxSetGraphScheduleConfig
for additional details.
Definition at line 101 of file vx_khr_pipelining.h.
Extra enums.
Enumerator  

VX_ENUM_GRAPH_SCHEDULE_MODE_TYPE 
Graph schedule mode type enumeration. 
Definition at line 59 of file vx_khr_pipelining.h.
Type of graph scheduling mode.
See vxSetGraphScheduleConfig
and vxGraphParameterEnqueueReadyRef
for details about each mode.
Definition at line 70 of file vx_khr_pipelining.h.
The graph attributes added by this extension.
Enumerator  

VX_GRAPH_SCHEDULE_MODE 
Returns the schedule mode of a graph. Readonly. Use a 
Definition at line 88 of file vx_khr_pipelining.h.
vx_status vxSetGraphScheduleConfig  (  vx_graph  graph, 
vx_enum  graph_schedule_mode,  
uint32_t  graph_parameters_list_size,  
const vx_graph_parameter_queue_params_t  graph_parameters_queue_params_list[]  
) 
Sets the graph scheduler config.
This API is used to set the graph scheduler config to allow user to schedule multiple instances of a graph for execution.
For legacy applications that don't need graph pipelining or batch processing, this API need not be used.
Using this API, the application specifies the graph schedule mode, as well as queueing parameters for all graph parameters that need to allow enqueueing of references. A single monolithic API is provided instead of discrete APIs, since this allows the implementation to get all information related to scheduling in one shot and then optimize the subsequent graph scheduling based on this information. This API MUST be called before graph verify since in this case it allows implementations the opportunity to optimize resources based on information provided by the application.
'graph_schedule_mode' selects how input and output references are provided to a graph and how the next graph schedule is triggered by an implementation.
Below scheduling modes are supported:
When graph schedule mode is VX_GRAPH_SCHEDULE_MODE_QUEUE_AUTO
:
vxVerifyGraph
before enqueing data referencesvxScheduleGraph
or vxProcessGraph
When graph schedule mode is VX_GRAPH_SCHEDULE_MODE_QUEUE_MANUAL
:
vxScheduleGraph
vxProcessGraph
vxScheduleGraph
is called on the graph else an error is returned by vxScheduleGraph
vxScheduleGraph
is called, all enqueued references get processed in a 'batch'.vxWaitGraph
to wait for the previous vxScheduleGraph
to complete.When graph schedule mode is VX_GRAPH_SCHEDULE_MODE_NORMAL
:
By default all graphs are in VX_GRAPH_SCHEDULE_MODE_NORMAL mode until this API is called.
'graph_parameters_queue_params_list' allows to specify below information:
For graph parameters listed in 'graph_parameters_queue_params_list', application MUST use vxGraphParameterEnqueueReadyRef
to set references at the graph parameter. Using other data access API's on these parameters or corresponding data objects will return an error. For graph parameters not listed in 'graph_parameters_queue_params_list' application MUST use the vxSetGraphParameterByIndex
to set the reference at the graph parameter. Using other data access API's on these parameters or corresponding data objects will return an error.
This API also allows application to provide a list of references which could be later enqueued at the graph parameter. This allows implementation to do metadata checking up front rather than during each reference enqueue.
When this API is called before vxVerifyGraph
, the 'refs_list' field can be NULL, if the reference handles are not available yet at the application. However 'refs_list_size' MUST always be specified by the application. Application can call vxSetGraphScheduleConfig
again after verify graph with all parameters remaining the same except with 'refs_list' field providing the list of references that can be enqueued at the graph parameter.
[in]  graph  Graph reference 
[in]  graph_schedule_mode  Graph schedule mode. See vx_graph_schedule_mode_type_e 
[in]  graph_parameters_list_size  Number of elements in graph_parameters_queue_params_list 
[in]  graph_parameters_queue_params_list  Array containing queuing properties at graph parameters that need to support queueing. 
vx_status_e
enumeration. VX_SUCCESS  No errors. 
VX_ERROR_INVALID_REFERENCE  graph is not a valid reference 
VX_ERROR_INVALID_PARAMETERS  Invalid graph parameter queueing parameters 
VX_FAILURE  Any other failure. 
vx_status vxGraphParameterEnqueueReadyRef  (  vx_graph  graph, 
vx_uint32  graph_parameter_index,  
vx_reference *  refs,  
vx_uint32  num_refs  
) 
Enqueues new references into a graph parameter for processing.
This new reference will take effect on the next graph schedule.
In case of a graph parameter which is input to a graph, this function provides a data reference with new input data to the graph. In case of a graph parameter which is not input to a graph, this function provides a 'empty' reference into which a graph execution can write new data into.
This function essentially transfers ownership of the reference from the application to the graph.
User MUST use vxGraphParameterDequeueDoneRef
to get back the processed or consumed references.
The references that are enqueued MUST be the references listed during vxSetGraphScheduleConfig
. If a reference outside this list is provided then behaviour is undefined.
[in]  graph  Graph reference 
[in]  graph_parameter_index  Graph parameter index 
[in]  refs  The array of references to enqueue into the graph parameter 
[in]  num_refs  Number of references to enqueue 
vx_status_e
enumeration. VX_SUCCESS  No errors. 
VX_ERROR_INVALID_REFERENCE  graph is not a valid reference OR reference is not a valid reference 
VX_ERROR_INVALID_PARAMETERS  graph_parameter_index is NOT a valid graph parameter index 
VX_FAILURE  Reference could not be enqueued. 
vx_status vxGraphParameterDequeueDoneRef  (  vx_graph  graph, 
vx_uint32  graph_parameter_index,  
vx_reference *  refs,  
vx_uint32  max_refs,  
vx_uint32 *  num_refs  
) 
Dequeues 'consumed' references from a graph parameter.
This function dequeues references from a graph parameter of a graph. The reference that is dequeued is a reference that had been previously enqueued into a graph, and after subsequent graph execution is considered as processed or consumed by the graph. This function essentially transfers ownership of the reference from the graph to the application.
IMPORTANT : This API will block until at least one reference is dequeued.
In case of a graph parameter which is input to a graph, this function provides a 'consumed' buffer to the application so that new input data can filled and later enqueued to the graph. In case of a graph parameter which is not input to a graph, this function provides a reference filled with new data based on graph execution. User can then use this newly generated data with their application. Typically when this new data is consumed by the application the 'empty' reference is again enqueued to the graph.
This API returns an array of references up to a maximum of 'max_refs'. Application MUST ensure the array pointer ('refs') passed as input can hold 'max_refs'. 'num_refs' is actual number of references returned and will be <= 'max_refs'.
[in]  graph  Graph reference 
[in]  graph_parameter_index  Graph parameter index 
[in]  refs  Pointer to an array of max elements 'max_refs' 
[out]  refs  Dequeued references filled in the array 
[in]  max_refs  Max number of references to dequeue 
[out]  num_refs  Actual number of references dequeued. 
vx_status_e
enumeration. VX_SUCCESS  No errors. 
VX_ERROR_INVALID_REFERENCE  graph is not a valid reference 
VX_ERROR_INVALID_PARAMETERS  graph_parameter_index is NOT a valid graph parameter index 
VX_FAILURE  Reference could not be dequeued. 
vx_status vxGraphParameterCheckDoneRef  (  vx_graph  graph, 
vx_uint32  graph_parameter_index,  
vx_uint32 *  num_refs  
) 
Checks and returns the number of references that are ready for dequeue.
This function checks the number of references that can be dequeued and returns the value to the application.
See also vxGraphParameterDequeueDoneRef
.
[in]  graph  Graph reference 
[in]  graph_parameter_index  Graph parameter index 
[out]  num_refs  Number of references that can be dequeued using 
vx_status_e
enumeration. VX_SUCCESS  No errors. 
VX_ERROR_INVALID_REFERENCE  graph is not a valid reference 
VX_ERROR_INVALID_PARAMETERS  graph_parameter_index is NOT a valid graph parameter index 
VX_FAILURE  Any other failure. 