|
|
@@ -1,5 +1,6 @@
|
|
|
cmake_minimum_required(VERSION 3.19)
|
|
|
cmake_policy(SET CMP0114 NEW)
|
|
|
+cmake_policy(SET CMP0116 NEW)
|
|
|
|
|
|
find_package(Vulkan COMPONENTS glslc REQUIRED)
|
|
|
|
|
|
@@ -54,25 +55,25 @@ if (Vulkan_FOUND)
|
|
|
# Test all shader extensions
|
|
|
test_shader_extension_support(
|
|
|
"GL_KHR_cooperative_matrix"
|
|
|
- "${CMAKE_CURRENT_SOURCE_DIR}/vulkan-shaders/test_coopmat_support.comp"
|
|
|
+ "${CMAKE_CURRENT_SOURCE_DIR}/vulkan-shaders/feature-tests/coopmat.comp"
|
|
|
"GGML_VULKAN_COOPMAT_GLSLC_SUPPORT"
|
|
|
)
|
|
|
|
|
|
test_shader_extension_support(
|
|
|
"GL_NV_cooperative_matrix2"
|
|
|
- "${CMAKE_CURRENT_SOURCE_DIR}/vulkan-shaders/test_coopmat2_support.comp"
|
|
|
+ "${CMAKE_CURRENT_SOURCE_DIR}/vulkan-shaders/feature-tests/coopmat2.comp"
|
|
|
"GGML_VULKAN_COOPMAT2_GLSLC_SUPPORT"
|
|
|
)
|
|
|
|
|
|
test_shader_extension_support(
|
|
|
"GL_EXT_integer_dot_product"
|
|
|
- "${CMAKE_CURRENT_SOURCE_DIR}/vulkan-shaders/test_integer_dot_support.comp"
|
|
|
+ "${CMAKE_CURRENT_SOURCE_DIR}/vulkan-shaders/feature-tests/integer_dot.comp"
|
|
|
"GGML_VULKAN_INTEGER_DOT_GLSLC_SUPPORT"
|
|
|
)
|
|
|
|
|
|
test_shader_extension_support(
|
|
|
"GL_EXT_bfloat16"
|
|
|
- "${CMAKE_CURRENT_SOURCE_DIR}/vulkan-shaders/test_bfloat16_support.comp"
|
|
|
+ "${CMAKE_CURRENT_SOURCE_DIR}/vulkan-shaders/feature-tests/bfloat16.comp"
|
|
|
"GGML_VULKAN_BFLOAT16_GLSLC_SUPPORT"
|
|
|
)
|
|
|
|
|
|
@@ -160,7 +161,6 @@ if (Vulkan_FOUND)
|
|
|
set (_ggml_vk_genshaders_dir "${CMAKE_BINARY_DIR}/$<CONFIG>")
|
|
|
set (_ggml_vk_genshaders_cmd "${_ggml_vk_genshaders_dir}/vulkan-shaders-gen${_ggml_vk_host_suffix}")
|
|
|
set (_ggml_vk_header "${CMAKE_CURRENT_BINARY_DIR}/ggml-vulkan-shaders.hpp")
|
|
|
- set (_ggml_vk_source "${CMAKE_CURRENT_BINARY_DIR}/ggml-vulkan-shaders.cpp")
|
|
|
set (_ggml_vk_input_dir "${CMAKE_CURRENT_SOURCE_DIR}/vulkan-shaders")
|
|
|
set (_ggml_vk_output_dir "${CMAKE_CURRENT_BINARY_DIR}/vulkan-shaders.spv")
|
|
|
|
|
|
@@ -176,24 +176,35 @@ if (Vulkan_FOUND)
|
|
|
|
|
|
add_custom_command(
|
|
|
OUTPUT ${_ggml_vk_header}
|
|
|
- ${_ggml_vk_source}
|
|
|
-
|
|
|
COMMAND ${_ggml_vk_genshaders_cmd}
|
|
|
- --glslc ${Vulkan_GLSLC_EXECUTABLE}
|
|
|
- --input-dir ${_ggml_vk_input_dir}
|
|
|
--output-dir ${_ggml_vk_output_dir}
|
|
|
--target-hpp ${_ggml_vk_header}
|
|
|
- --target-cpp ${_ggml_vk_source}
|
|
|
- --no-clean
|
|
|
-
|
|
|
- DEPENDS ${_ggml_vk_shader_files}
|
|
|
- ${_ggml_vk_shaders_gen_sources}
|
|
|
+ DEPENDS ${_ggml_vk_shaders_gen_sources}
|
|
|
vulkan-shaders-gen
|
|
|
-
|
|
|
- COMMENT "Generate vulkan shaders"
|
|
|
+ COMMENT "Generate vulkan shaders header"
|
|
|
)
|
|
|
-
|
|
|
- target_sources(ggml-vulkan PRIVATE ${_ggml_vk_source} ${_ggml_vk_header})
|
|
|
+ target_sources(ggml-vulkan PRIVATE ${_ggml_vk_header})
|
|
|
+
|
|
|
+ foreach (file_full ${_ggml_vk_shader_files})
|
|
|
+ get_filename_component(file ${file_full} NAME)
|
|
|
+ set (_ggml_vk_target_cpp "${CMAKE_CURRENT_BINARY_DIR}/${file}.cpp")
|
|
|
+
|
|
|
+ add_custom_command(
|
|
|
+ OUTPUT ${_ggml_vk_target_cpp}
|
|
|
+ DEPFILE ${_ggml_vk_target_cpp}.d
|
|
|
+ COMMAND ${_ggml_vk_genshaders_cmd}
|
|
|
+ --glslc ${Vulkan_GLSLC_EXECUTABLE}
|
|
|
+ --source ${file_full}
|
|
|
+ --output-dir ${_ggml_vk_output_dir}
|
|
|
+ --target-hpp ${_ggml_vk_header}
|
|
|
+ --target-cpp ${_ggml_vk_target_cpp}
|
|
|
+ DEPENDS ${file_full}
|
|
|
+ ${_ggml_vk_shaders_gen_sources}
|
|
|
+ vulkan-shaders-gen
|
|
|
+ COMMENT "Generate vulkan shaders for ${file}"
|
|
|
+ )
|
|
|
+ target_sources(ggml-vulkan PRIVATE ${_ggml_vk_target_cpp})
|
|
|
+ endforeach()
|
|
|
|
|
|
else()
|
|
|
message(WARNING "Vulkan not found")
|