/* * Copyright (c) 2012-2017 The Khronos Group Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef _VX_EXT_TARGET_H_ #define _VX_EXT_TARGET_H_ #include /*! \file * \brief The OpenVX Target API Definition */ /*! \brief The extension name. * \ingroup group_target */ #define OPENVX_EXT_TARGET "vx_ext_target" /*! \brief Defines the maximum number of characters in a target string. * \ingroup group_target */ #define VX_MAX_TARGET_NAME (64) enum vx_ext_target_context_attribute_e { /*! \brief Used to query the context for the number of active targets. Use a \ref vx_uint32 parameter. */ VX_CONTEXT_TARGETS = VX_ATTRIBUTE_BASE(VX_ID_KHRONOS, VX_TYPE_CONTEXT) + 0xE, }; /*! \brief An abstract handle to a target. * \ingroup group_target */ typedef struct _vx_target *vx_target; /*! \brief The target attributes list * \ingroup group_target */ enum vx_target_attribute_e { /*! \brief Returns the index of the given target. Use a \ref vx_uint32 parameter.*/ VX_TARGET_ATTRIBUTE_INDEX = VX_ATTRIBUTE_BASE(VX_ID_KHRONOS, VX_TYPE_TARGET) + 0x0, /*! \brief Returns the name of the given target in the format "vendor.vendor_string". * Use a \ref vx_char[\ref VX_MAX_TARGET_NAME] array */ VX_TARGET_ATTRIBUTE_NAME = VX_ATTRIBUTE_BASE(VX_ID_KHRONOS, VX_TYPE_TARGET) + 0x1, /*! \brief Returns the number of kernels that the target is capable of processing. * This is then used to allocate a table which is then filled when \ref vxQueryTarget * is called with \ref VX_TARGET_ATTRIBUTE_KERNELTABLE. * Use a \ref vx_uint32 parameter. */ VX_TARGET_ATTRIBUTE_NUMKERNELS = VX_ATTRIBUTE_BASE(VX_ID_KHRONOS, VX_TYPE_TARGET) + 0x2, /*! \brief Returns the table of all the kernels that a given target can execute. * Use a vx_kernel_info_t array. * \pre You must call \ref vxQueryTarget with \ref VX_TARGET_ATTRIBUTE_NUMKERNELS * to compute the necessary size of the array. */ VX_TARGET_ATTRIBUTE_KERNELTABLE = VX_ATTRIBUTE_BASE(VX_ID_KHRONOS, VX_TYPE_TARGET) + 0x3, }; #if defined(__cplusplus) extern "C" { #endif /*! \brief Used to retrieve a target reference by the index of the target. * \param [in] context The reference to the overall context. * \param [in] index The index of the target to get a reference to. * \return \ref vx_target * \retval 0 Invalid index. * \retval * A target reference. * \note Use \ref vxQueryContext with \ref VX_CONTEXT_NUMTARGETS to retrieve the upper limit of targets. * \ingroup group_target */ VX_API_ENTRY vx_target VX_API_CALL vxGetTargetByIndex(vx_context context, vx_uint32 index); /*! \brief Used to get a reference to named target when the name is known beforehand. * \param [in] context The reference to the overall context. * \param [in] name The target string name. * \return \ref vx_target * \retval 0 Invalid index. * \retval * A target reference. * \ingroup group_target */ VX_API_ENTRY vx_target VX_API_CALL vxGetTargetByName(vx_context context, const vx_char *name); /*! \brief Releases a reference to a target object. * The object may not be garbage collected until its total reference count is zero. * \param [in] target The pointer to the target to release. * \return A \ref vx_status_e enumeration. * \retval VX_SUCCESS No errors. * \retval VX_ERROR_INVALID_REFERENCE If target is not a \ref vx_target. * \note After returning from this function the reference will be zeroed. * \ingroup group_target */ VX_API_ENTRY vx_status VX_API_CALL vxReleaseTarget(vx_target *target); /*! \brief Used to query the target about it's properties. * \param [in] target The reference to the target. * \param [in] attribute The \ref vx_target_attribute_e value to query for. * \param [out] ptr The location at which the resulting value will be stored. * \param [in] size The size of the container to which ptr points. * \return A \ref vx_status_e enumeration. * \pre \ref vxGetTargetByName or \ref vxGetTargetByIndex * \ingroup group_target */ VX_API_ENTRY vx_status VX_API_CALL vxQueryTarget(vx_target target, vx_enum attribute, void *ptr, vx_size size); /*! \brief Used to assign target affinity to a node. * \note This assignment overrides implementation chosen behavior. * \param [in] node The node reference to assign affinity to. * \param [in] target The reference to the target to execute the Node on. * \pre \ref vxGetTargetByName or \ref vxGetTargetByIndex * \return A \ref vx_status_e enumeration. * \ingroup group_target * \pre vxCreateGenericNode or some other node creation function. * \retval VX_ERROR_INVALID_REFERENCE Either node or target was not a valid reference. * \retval VX_ERROR_NOT_SUPPORTED The node can not be executed on that target. */ VX_API_ENTRY vx_status VX_API_CALL vxAssignNodeAffinity(vx_node node, vx_target target); #if defined(__cplusplus) } #endif #endif