Skip to content

Commit 5c3b191

Browse files
danielzhao91dongdong
andauthored
Dev/vulkan (#633)
* update CMakeLists to install tengine cpp api header * update vulkan to support tengine v1.4 * Update CMakeLists.txt Co-authored-by: dongdong <[email protected]>
1 parent 7711300 commit 5c3b191

File tree

212 files changed

+46448
-1
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

212 files changed

+46448
-1
lines changed

source/CMakeLists.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -385,6 +385,12 @@ IF (TENGINE_ENABLE_CUDA)
385385
ENDIF()
386386
ENDIF()
387387

388+
# deal with depends
389+
390+
FOREACH(_var ${TENGINE_DEVICE_DEPENDS_FORWARD})
391+
ADD_DEPENDENCIES(${TENGINE_LITE_NAME}-static ${_var})
392+
ADD_DEPENDENCIES(${TENGINE_LITE_NAME} ${_var})
393+
ENDFOREACH()
388394

389395
# debug macro information
390396
IF (TENGINE_DEBUG_MEM_STAT)

source/device/CMakeLists.txt

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,21 @@ IF (TENGINE_ENABLE_TIM_VX)
133133
LIST (APPEND _REGISTER_DEVICE_LIST "${CMAKE_SOURCE_DIR}/source/device/tim-vx/timvx_device.cc")
134134
ENDIF()
135135

136+
# Khronos Vulkan
137+
IF (TENGINE_ENABLE_VULKAN)
138+
ADD_SUBDIRECTORY (vulkan)
139+
140+
LIST (APPEND _TENGINE_DEVICE_HEADER_PATH ${TENGINE_VULKAN_HEADER_PATH})
141+
LIST (APPEND _TENGINE_DEVICE_LINK_PATH ${TENGINE_VULKAN_LINK_PATH})
142+
LIST (APPEND _TENGINE_DEVICE_COMPILER_DEFINES ${TENGINE_VULKAN_COMPILER_DEFINES})
143+
LIST (APPEND _TENGINE_DEVICE_COMPILER_OPTIONS ${TENGINE_VULKAN_COMPILER_OPTIONS})
144+
LIST (APPEND _TENGINE_DEVICE_LINKER_OPTIONS ${TENGINE_VULKAN_LINKER_OPTIONS})
145+
LIST (APPEND _TENGINE_DEVICE_LINK_LIBRARIES ${TENGINE_VULKAN_LINK_LIBRARIES})
146+
LIST (APPEND _TENGINE_DEVICE_SOURCE ${TENGINE_VULKAN_DEVICE_SOURCE})
147+
LIST (APPEND _TENGINE_DEVICE_DEPENDS_FORWARD ${TENGINE_VULKAN_DEPENDS_FORWARD})
148+
LIST (APPEND _REGISTER_DEVICE_LIST "${CMAKE_SOURCE_DIR}/source/device/vulkan/vulkan_device.cc")
149+
ENDIF()
150+
136151

137152
# set var to cache
138153
SET (TENGINE_DEVICE_HEADER_PATH ${_TENGINE_DEVICE_HEADER_PATH} CACHE INTERNAL "Tengine device level header files searching path" FORCE)
@@ -142,7 +157,7 @@ SET (TENGINE_DEVICE_COMPILER_DEFINES ${_TENGINE_DEVICE_COMPILER_DEFINES} CACH
142157
SET (TENGINE_DEVICE_COMPILER_OPTIONS ${_TENGINE_DEVICE_COMPILER_OPTIONS} CACHE INTERNAL "Tengine device about compiler options" FORCE)
143158
SET (TENGINE_DEVICE_LINKER_OPTIONS ${_TENGINE_DEVICE_LINKER_OPTIONS} CACHE INTERNAL "Tengine device about linker options" FORCE)
144159
SET (TENGINE_DEVICE_LINK_LIBRARIES ${_TENGINE_DEVICE_LINK_LIBRARIES} CACHE INTERNAL "Tengine device about link libraries" FORCE)
145-
160+
SET (TENGINE_DEVICE_DEPENDS_FORWARD ${_TENGINE_DEVICE_DEPENDS_FORWARD} CACHE INTERNAL "Tengine device about depends project" FORCE)
146161

147162
# generate device register configuration
148163
GENERATE_REGISTER_HEADER_FILE ("register_" "unregister_" "" "${CMAKE_SOURCE_DIR}/source/device/register.h.in" "${CMAKE_BINARY_DIR}/source/device/register.h" "${_REGISTER_DEVICE_LIST}")

source/device/vulkan/CMakeLists.txt

Lines changed: 171 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,171 @@
1+
# 0. clear var
2+
UNSET (_DEV_VULKAN_HEADER_PATH)
3+
UNSET (_VULKAN_BASE_SOURCE)
4+
UNSET (_VULKAN_OPS_SOURCE)
5+
UNSET (_DEV_VULKAN_DEVICE_SOURCE)
6+
UNSET (_DEV_VULKAN_COMPILER_DEFINES)
7+
UNSET (_DEV_VULKAN_COMPILER_OPTIONS)
8+
UNSET (_DEV_VULKAN_LINKER_OPTIONS)
9+
UNSET (_DEV_VULKAN_LINK_LIBRARIES)
10+
11+
12+
13+
find_program(GLSLANGVALIDATOR_EXECUTABLE NAMES glslangValidator PATHS $ENV{VULKAN_SDK}/bin NO_CMAKE_FIND_ROOT_PATH REQUIRED)
14+
message(STATUS "Tengine: found glslangValidator: ${GLSLANGVALIDATOR_EXECUTABLE}")
15+
16+
# add shader spv header generate macro
17+
include(${CMAKE_SOURCE_DIR}/cmake/generate_shader_spv_header.cmake)
18+
19+
macro(add_shader SHADER_SRC)
20+
message(STATUS "SHADER_SRC: ${SHADER_SRC}")
21+
generate_shader_spv_header(SHADER_SPV_HEADER SHADER_SPV_HEX_HEADERS ${SHADER_SRC})
22+
23+
24+
get_filename_component(SHADER_SPV_HEADER_NAME ${SHADER_SPV_HEADER} NAME)
25+
string(APPEND layer_shader_spv_data "#include \"${SHADER_SPV_HEADER_NAME}\"\n")
26+
27+
get_filename_component(SHADER_SRC_NAME_WE ${SHADER_SRC} NAME_WE)
28+
string(APPEND layer_shader_registry "{${SHADER_SRC_NAME_WE}_spv_data,sizeof(${SHADER_SRC_NAME_WE}_spv_data)},\n")
29+
string(APPEND layer_shader_registry "{${SHADER_SRC_NAME_WE}_fp16p_spv_data,sizeof(${SHADER_SRC_NAME_WE}_fp16p_spv_data)},\n")
30+
string(APPEND layer_shader_registry "{${SHADER_SRC_NAME_WE}_fp16pa_spv_data,sizeof(${SHADER_SRC_NAME_WE}_fp16pa_spv_data)},\n")
31+
string(APPEND layer_shader_registry "{${SHADER_SRC_NAME_WE}_fp16s_spv_data,sizeof(${SHADER_SRC_NAME_WE}_fp16s_spv_data)},\n")
32+
string(APPEND layer_shader_registry "{${SHADER_SRC_NAME_WE}_fp16sa_spv_data,sizeof(${SHADER_SRC_NAME_WE}_fp16sa_spv_data)},\n")
33+
string(APPEND layer_shader_registry "{${SHADER_SRC_NAME_WE}_image_spv_data,sizeof(${SHADER_SRC_NAME_WE}_image_spv_data)},\n")
34+
string(APPEND layer_shader_registry "{${SHADER_SRC_NAME_WE}_image_fp16p_spv_data,sizeof(${SHADER_SRC_NAME_WE}_image_fp16p_spv_data)},\n")
35+
string(APPEND layer_shader_registry "{${SHADER_SRC_NAME_WE}_image_fp16pa_spv_data,sizeof(${SHADER_SRC_NAME_WE}_image_fp16pa_spv_data)},\n")
36+
string(APPEND layer_shader_registry "{${SHADER_SRC_NAME_WE}_image_fp16s_spv_data,sizeof(${SHADER_SRC_NAME_WE}_image_fp16s_spv_data)},\n")
37+
string(APPEND layer_shader_registry "{${SHADER_SRC_NAME_WE}_image_fp16sa_spv_data,sizeof(${SHADER_SRC_NAME_WE}_image_fp16sa_spv_data)},\n")
38+
39+
list(APPEND SHADER_SPV_HEX_FILES ${SHADER_SPV_HEADER})
40+
list(APPEND SHADER_SPV_HEX_FILES ${SHADER_SPV_HEX_HEADERS})
41+
42+
# generate layer_shader_type_enum file
43+
set(layer_shader_type_enum "${layer_shader_type_enum}${SHADER_SRC_NAME_WE} = ${__LAYER_SHADER_TYPE_ENUM_INDEX},\n")
44+
math(EXPR __LAYER_SHADER_TYPE_ENUM_INDEX "${__LAYER_SHADER_TYPE_ENUM_INDEX}+1")
45+
set(layer_shader_type_enum "${layer_shader_type_enum}${SHADER_SRC_NAME_WE}_fp16p = ${__LAYER_SHADER_TYPE_ENUM_INDEX},\n")
46+
math(EXPR __LAYER_SHADER_TYPE_ENUM_INDEX "${__LAYER_SHADER_TYPE_ENUM_INDEX}+1")
47+
set(layer_shader_type_enum "${layer_shader_type_enum}${SHADER_SRC_NAME_WE}_fp16pa = ${__LAYER_SHADER_TYPE_ENUM_INDEX},\n")
48+
math(EXPR __LAYER_SHADER_TYPE_ENUM_INDEX "${__LAYER_SHADER_TYPE_ENUM_INDEX}+1")
49+
set(layer_shader_type_enum "${layer_shader_type_enum}${SHADER_SRC_NAME_WE}_fp16s = ${__LAYER_SHADER_TYPE_ENUM_INDEX},\n")
50+
math(EXPR __LAYER_SHADER_TYPE_ENUM_INDEX "${__LAYER_SHADER_TYPE_ENUM_INDEX}+1")
51+
set(layer_shader_type_enum "${layer_shader_type_enum}${SHADER_SRC_NAME_WE}_fp16sa = ${__LAYER_SHADER_TYPE_ENUM_INDEX},\n")
52+
math(EXPR __LAYER_SHADER_TYPE_ENUM_INDEX "${__LAYER_SHADER_TYPE_ENUM_INDEX}+1")
53+
set(layer_shader_type_enum "${layer_shader_type_enum}${SHADER_SRC_NAME_WE}_image = ${__LAYER_SHADER_TYPE_ENUM_INDEX},\n")
54+
math(EXPR __LAYER_SHADER_TYPE_ENUM_INDEX "${__LAYER_SHADER_TYPE_ENUM_INDEX}+1")
55+
set(layer_shader_type_enum "${layer_shader_type_enum}${SHADER_SRC_NAME_WE}_image_fp16p = ${__LAYER_SHADER_TYPE_ENUM_INDEX},\n")
56+
math(EXPR __LAYER_SHADER_TYPE_ENUM_INDEX "${__LAYER_SHADER_TYPE_ENUM_INDEX}+1")
57+
set(layer_shader_type_enum "${layer_shader_type_enum}${SHADER_SRC_NAME_WE}_image_fp16pa = ${__LAYER_SHADER_TYPE_ENUM_INDEX},\n")
58+
math(EXPR __LAYER_SHADER_TYPE_ENUM_INDEX "${__LAYER_SHADER_TYPE_ENUM_INDEX}+1")
59+
set(layer_shader_type_enum "${layer_shader_type_enum}${SHADER_SRC_NAME_WE}_image_fp16s = ${__LAYER_SHADER_TYPE_ENUM_INDEX},\n")
60+
math(EXPR __LAYER_SHADER_TYPE_ENUM_INDEX "${__LAYER_SHADER_TYPE_ENUM_INDEX}+1")
61+
set(layer_shader_type_enum "${layer_shader_type_enum}${SHADER_SRC_NAME_WE}_image_fp16sa = ${__LAYER_SHADER_TYPE_ENUM_INDEX},\n")
62+
math(EXPR __LAYER_SHADER_TYPE_ENUM_INDEX "${__LAYER_SHADER_TYPE_ENUM_INDEX}+1")
63+
64+
endmacro()
65+
66+
macro(add_layer class)
67+
string(TOLOWER ${class} name)
68+
69+
file(GLOB_RECURSE SHADER_SRCS "shaders/${name}.comp")
70+
file(GLOB_RECURSE SHADER_SUBSRCS "shaders/${name}_*.comp")
71+
list(APPEND SHADER_SRCS ${SHADER_SUBSRCS})
72+
foreach(SHADER_SRC ${SHADER_SRCS})
73+
add_shader(${SHADER_SRC})
74+
endforeach()
75+
76+
# generate layer_type_enum file
77+
set(layer_type_enum "${layer_type_enum}${class} = ${__LAYER_TYPE_ENUM_INDEX},\n")
78+
math(EXPR __LAYER_TYPE_ENUM_INDEX "${__LAYER_TYPE_ENUM_INDEX}+1")
79+
endmacro()
80+
81+
set(SHADER_SPV_HEX_FILES)
82+
83+
set(__LAYER_TYPE_ENUM_INDEX 0)
84+
set(__LAYER_SHADER_TYPE_ENUM_INDEX 0)
85+
86+
add_layer(Convolution)
87+
add_layer(ConvolutionDepthWise)
88+
add_layer(Pooling)
89+
add_layer(Padding)
90+
add_layer(Packing)
91+
add_layer(InnerProduct)
92+
add_layer(Flatten)
93+
add_layer(Relu)
94+
add_layer(Eltwise)
95+
add_layer(Softmax)
96+
add_layer(Dropout)
97+
add_layer(PriorBox)
98+
add_layer(Permute)
99+
add_layer(Reshape)
100+
add_layer(Concat)
101+
add_layer(Interp)
102+
add_layer(Crop)
103+
104+
add_custom_target(generate-spirv DEPENDS ${SHADER_SPV_HEX_FILES})
105+
106+
# create new registry file
107+
configure_file(layer_shader_registry.h.in ${CMAKE_CURRENT_BINARY_DIR}/layer_shader_registry.h)
108+
configure_file(layer_shader_spv_data.h.in ${CMAKE_CURRENT_BINARY_DIR}/layer_shader_spv_data.h)
109+
configure_file(layer_type_enum.h.in ${CMAKE_CURRENT_BINARY_DIR}/layer_type_enum.h)
110+
configure_file(layer_shader_type_enum.h.in ${CMAKE_CURRENT_BINARY_DIR}/layer_shader_type_enum.h)
111+
112+
# find_package(Vulkan QUIET)
113+
set(VULKAN_LIBRARY "/usr/lib/x86_64-linux-gnu/" CACHE INTERNAL " " FORCE)
114+
set(VULKAN_INCLUDE_DIRS "/usr/include/vulkan/" CACHE INTERNAL " " FORCE)
115+
116+
# 1. set source root path
117+
SET(_VULKAN_ROOT ${CMAKE_SOURCE_DIR}/source/device/vulkan)
118+
SET(_VULKAN_BUILD_ROOT ${CMAKE_CURRENT_BINARY_DIR})
119+
120+
121+
# 2. add header file path
122+
LIST (APPEND _DEV_VULKAN_HEADER_PATH ${_VULKAN_BUILD_ROOT})
123+
LIST (APPEND _DEV_VULKAN_HEADER_PATH ${_VULKAN_ROOT})
124+
LIST (APPEND _DEV_VULKAN_HEADER_PATH ${VULKAN_INCLUDE_DIRS})
125+
126+
127+
# 3. add linking lib searching path
128+
LIST (APPEND _DEV_VULKAN_LINK_PATH ${VULKAN_LIBRARY})
129+
130+
131+
# 4. add source files
132+
AUX_SOURCE_DIRECTORY("${_VULKAN_ROOT}" _VULKAN_BASE_SOURCE)
133+
AUX_SOURCE_DIRECTORY("${_VULKAN_ROOT}/layer" _VULKAN_OPS_SOURCE)
134+
LIST (APPEND _DEV_VULKAN_DEVICE_SOURCE ${_VULKAN_BASE_SOURCE})
135+
LIST (APPEND _DEV_VULKAN_DEVICE_SOURCE ${_VULKAN_OPS_SOURCE})
136+
137+
138+
# 5. add build options for cpu device
139+
# 5.1 is a gcc or clang like compiler
140+
IF (TENGINE_COMPILER_GCC OR TENGINE_COMPILER_CLANG)
141+
IF (TENGINE_COMPILER_GCC AND (${CMAKE_CXX_COMPILER_VERSION} VERSION_GREATER_EQUAL "6.1"))
142+
LIST (APPEND _DEV_VULKAN_COMPILER_OPTIONS -Wno-ignored-attributes)
143+
ENDIF()
144+
ENDIF()
145+
146+
147+
# 5.2 is Microsoft Visual C++
148+
IF (TENGINE_COMPILER_MSVC)
149+
ENDIF()
150+
151+
152+
# 6. add link options
153+
154+
155+
# 7. add link libs
156+
LIST (APPEND _DEV_VULKAN_LINK_LIBRARIES "libvulkan.so")
157+
158+
159+
# 8. set all to cmake cache
160+
SET (TENGINE_VULKAN_HEADER_PATH ${_DEV_VULKAN_HEADER_PATH} CACHE INTERNAL "Tengine VULKAN device header files searching path" FORCE)
161+
SET (TENGINE_VULKAN_LINK_PATH ${_DEV_VULKAN_LINK_PATH} CACHE INTERNAL "Tengine VULKAN device link libraries searching path" FORCE)
162+
SET (TENGINE_VULKAN_DEVICE_SOURCE ${_DEV_VULKAN_DEVICE_SOURCE} CACHE INTERNAL "Tengine VULKAN device main source files" FORCE)
163+
SET (TENGINE_VULKAN_COMPILER_DEFINES ${_DEV_VULKAN_COMPILER_DEFINES} CACHE INTERNAL "Tengine VULKAN about compiler defines" FORCE)
164+
SET (TENGINE_VULKAN_COMPILER_OPTIONS ${_DEV_VULKAN_COMPILER_OPTIONS} CACHE INTERNAL "Tengine VULKAN about compiler options" FORCE)
165+
SET (TENGINE_VULKAN_LINKER_OPTIONS ${_DEV_VULKAN_LINKER_OPTIONS} CACHE INTERNAL "Tengine VULKAN about linker options" FORCE)
166+
SET (TENGINE_VULKAN_LINK_LIBRARIES ${_DEV_VULKAN_LINK_LIBRARIES} CACHE INTERNAL "Tengine VULKAN about link libraries" FORCE)
167+
SET (TENGINE_VULKAN_DEPENDS_FORWARD generate-spirv CACHE INTERNAL "Tengine VULKAN about depends project" FORCE)
168+
169+
170+
# 9. install device option
171+
INSTALL (FILES ${_VULKAN_ROOT}/VULKAN_define.h DESTINATION include/tengine RENAME VULKAN_device.h)

0 commit comments

Comments
 (0)