196 lines
6.2 KiB
C
196 lines
6.2 KiB
C
/****************************************************************************
|
|
*
|
|
* Copyright 2017 - 2020 Vivante Corporation, Santa Clara, California.
|
|
* All Rights Reserved.
|
|
*
|
|
* Permission is hereby granted, free of charge, to any person obtaining
|
|
* a copy of this software and associated documentation files (the
|
|
* 'Software'), to deal in the Software without restriction, including
|
|
* without limitation the rights to use, copy, modify, merge, publish,
|
|
* distribute, sub license, and/or sell copies of the Software, and to
|
|
* permit persons to whom the Software is furnished to do so, subject
|
|
* to the following conditions:
|
|
*
|
|
* The above copyright notice and this permission notice (including the
|
|
* next paragraph) shall be included in all copies or substantial
|
|
* portions of the Software.
|
|
*
|
|
* THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
|
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
|
|
* IN NO EVENT SHALL VIVANTE AND/OR ITS SUPPLIERS BE LIABLE FOR ANY
|
|
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
|
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
|
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
*
|
|
*****************************************************************************/
|
|
|
|
#ifndef _VX_EXT_PROGRAM_H_
|
|
#define _VX_EXT_PROGRAM_H_
|
|
|
|
#include <VX/vx.h>
|
|
|
|
/***********************************************************************************/
|
|
|
|
#define VX_512BITS_DISABLE 0
|
|
#define VX_512BITS_ADD 0x1
|
|
#define VX_512BITS_SUBTRACT 0x2
|
|
#define VX_512BITS_ACCUMULATOR 0x3
|
|
|
|
#define VX_512BITS_TYPE_FLOAT32 0x0
|
|
#define VX_512BITS_TYPE_FLOAT16 0x1
|
|
#define VX_512BITS_TYPE_SIGNED32 0x2
|
|
#define VX_512BITS_TYPE_SIGNED16 0x3
|
|
#define VX_512BITS_TYPE_SIGNED8 0x4
|
|
#define VX_512BITS_TYPE_UNSIGNED32 0x5
|
|
#define VX_512BITS_TYPE_UNSIGNED16 0x6
|
|
#define VX_512BITS_TYPE_UNSIGNED8 0x7
|
|
|
|
#define VX_512BITS_SELECT_SRC0 0
|
|
#define VX_512BITS_SELECT_SRC1 1
|
|
#define VX_512BITS_SELECT_CONSTANTS 2
|
|
|
|
typedef union _vx_512bits_bin_t
|
|
{
|
|
vx_uint8 bin8[16];
|
|
vx_uint16 bin16[8];
|
|
vx_uint32 bin32[4];
|
|
}
|
|
vx_512bits_bin_t;
|
|
|
|
typedef union _vx_512bits_config_t
|
|
{
|
|
struct
|
|
{
|
|
vx_uint32 flag0 :2;
|
|
vx_uint32 flag1 :2;
|
|
vx_uint32 flag2 :2;
|
|
vx_uint32 flag3 :2;
|
|
vx_uint32 flag4 :2;
|
|
vx_uint32 flag5 :2;
|
|
vx_uint32 flag6 :2;
|
|
vx_uint32 flag7 :2;
|
|
vx_uint32 flag8 :2;
|
|
vx_uint32 flag9 :2;
|
|
vx_uint32 flag10:2;
|
|
vx_uint32 flag11:2;
|
|
vx_uint32 flag12:2;
|
|
vx_uint32 flag13:2;
|
|
vx_uint32 flag14:2;
|
|
vx_uint32 flag15:2;
|
|
}
|
|
bin2;
|
|
|
|
struct
|
|
{
|
|
vx_uint32 flag0 :4;
|
|
vx_uint32 flag1 :4;
|
|
vx_uint32 flag2 :4;
|
|
vx_uint32 flag3 :4;
|
|
vx_uint32 flag4 :4;
|
|
vx_uint32 flag5 :4;
|
|
vx_uint32 flag6 :4;
|
|
vx_uint32 flag7 :4;
|
|
}
|
|
bin4;
|
|
}
|
|
vx_512bits_config_t;
|
|
|
|
typedef struct _vx_512bits_miscconfig_t
|
|
{
|
|
vx_uint32 post_shift :5; /*[0:4]*/
|
|
vx_uint32 resolve1 :3; /*[5:7]*/
|
|
vx_uint32 constant_type :3; /*[8:10]*/
|
|
vx_uint32 resolve2 :1; /*[11:11]*/
|
|
vx_uint32 accu_type :3; /*[12:14]*/
|
|
vx_uint32 resolve3 :17;/*[15:31]*/
|
|
}
|
|
vx_512bits_miscconfig_t;
|
|
|
|
typedef struct _vx_512bits_t
|
|
{
|
|
vx_512bits_config_t termConfig;
|
|
vx_512bits_config_t aSelect;
|
|
vx_512bits_config_t aBin[2];
|
|
vx_512bits_config_t bSelect;
|
|
vx_512bits_config_t bBin[2];
|
|
vx_512bits_miscconfig_t miscConfig;
|
|
vx_512bits_bin_t bins[2];
|
|
}
|
|
vx_512bits_t;
|
|
|
|
/***********************************************************************************/
|
|
|
|
typedef enum vx_ext_program_type_e
|
|
{
|
|
VX_TYPE_PROGRAM = 0x900
|
|
}
|
|
vx_ext_program_type_e;
|
|
|
|
typedef enum vx_program_attribute_e
|
|
{
|
|
VX_PROGRAM_ATTRIBUTE_BUILD_LOG = VX_ATTRIBUTE_BASE(VX_ID_VIVANTE, VX_TYPE_PROGRAM) + 0x0,
|
|
}
|
|
vx_program_attribute_e;
|
|
|
|
typedef enum vx_ext_node_attribute_e
|
|
{
|
|
VX_NODE_ATTRIBUTE_KERNEL_EXECUTION_PARAMETERS = VX_ATTRIBUTE_BASE(VX_ID_VIVANTE, VX_TYPE_NODE) + 0x0,
|
|
}
|
|
vx_ext_node_attribute_e;
|
|
|
|
#define VX_MAX_WORK_ITEM_DIMENSIONS 3
|
|
|
|
typedef struct _vx_kernel_execution_parameters {
|
|
vx_uint32 workDim;
|
|
vx_size globalWorkOffset[VX_MAX_WORK_ITEM_DIMENSIONS];
|
|
vx_size globalWorkScale[VX_MAX_WORK_ITEM_DIMENSIONS];
|
|
vx_size localWorkSize[VX_MAX_WORK_ITEM_DIMENSIONS];
|
|
vx_size globalWorkSize[VX_MAX_WORK_ITEM_DIMENSIONS];
|
|
} vx_kernel_execution_parameters_t;
|
|
|
|
typedef struct _vx_program * vx_program;
|
|
|
|
#define VX_BUILD_SUCCESS 0
|
|
#define VX_BUILD_NONE -1
|
|
#define VX_BUILD_ERROR -2
|
|
#define VX_BUILD_IN_PROGRESS -3
|
|
|
|
#if defined(__cplusplus)
|
|
extern "C" {
|
|
#endif
|
|
|
|
|
|
VX_API_ENTRY vx_program VX_API_CALL vxCreateProgramWithSource(
|
|
vx_context context, vx_uint32 count, const vx_char * strings[], vx_size lengths[]);
|
|
|
|
VX_API_ENTRY vx_program VX_API_CALL vxCreateProgramWithBinary(
|
|
vx_context context, const vx_uint8 * binary, vx_size size);
|
|
|
|
VX_API_ENTRY vx_status VX_API_CALL vxReleaseProgram(vx_program *program);
|
|
|
|
VX_API_ENTRY vx_status VX_API_CALL vxBuildProgram(vx_program program, const vx_char * options);
|
|
|
|
|
|
VX_API_ENTRY vx_status VX_API_CALL vxQueryProgram(vx_program program, vx_enum attribute, void *ptr, vx_size size);
|
|
|
|
VX_API_ENTRY vx_kernel VX_API_CALL vxAddKernelInProgram(
|
|
vx_program program, vx_char name[VX_MAX_KERNEL_NAME], vx_enum enumeration, vx_uint32 num_params, vx_kernel_validate_f validate,
|
|
vx_kernel_initialize_f initialize, vx_kernel_deinitialize_f deinitialize);
|
|
|
|
VX_API_ENTRY vx_status VX_API_CALL vxSetNodeUniform(vx_node node, const vx_char * name, vx_size count, void * value);
|
|
|
|
VX_API_ENTRY vx_status VX_API_CALL vxSetChildGraphOfNode(vx_node node, vx_graph graph);
|
|
|
|
VX_API_ENTRY vx_graph VX_API_CALL vxGetChildGraphOfNode(vx_node node);
|
|
|
|
VX_API_ENTRY vx_status VX_API_CALL vxSetArrayAttribute(vx_array array, vx_enum attribute, void *ptr, vx_size size);
|
|
|
|
VX_API_ENTRY vx_status VX_API_CALL vxSelectKernelSubname(vx_node node, const vx_char * subname);
|
|
|
|
#if defined(__cplusplus)
|
|
}
|
|
#endif
|
|
|
|
#endif /* __GC_VX_PROGRAM_H__ */
|