From b25236d2aa2935278810e138ea05f25c53c1667c Mon Sep 17 00:00:00 2001 From: Mason M Date: Fri, 2 May 2025 09:20:35 -0300 Subject: [PATCH 1/4] Add cmake function to simplify shader tests --- ggml/src/ggml-vulkan/CMakeLists.txt | 105 ++++++++++++---------------- 1 file changed, 45 insertions(+), 60 deletions(-) diff --git a/ggml/src/ggml-vulkan/CMakeLists.txt b/ggml/src/ggml-vulkan/CMakeLists.txt index 31816219c06fd..9a49286899915 100644 --- a/ggml/src/ggml-vulkan/CMakeLists.txt +++ b/ggml/src/ggml-vulkan/CMakeLists.txt @@ -15,6 +15,30 @@ function(detect_host_compiler) set(HOST_CXX_COMPILER "${HOST_CXX_COMPILER}" PARENT_SCOPE) endfunction() +# Function to test shader extension support +# Parameters: +# EXTENSION_NAME - Name of the extension to test (e.g., "GL_EXT_integer_dot_product") +# TEST_SHADER_FILE - Path to the test shader file +# RESULT_VARIABLE - Name of the variable to set (ON/OFF) based on test result +function(test_shader_extension_support EXTENSION_NAME TEST_SHADER_FILE RESULT_VARIABLE) + # Compile the test shader to determine whether the extension is supported + execute_process( + COMMAND ${Vulkan_GLSLC_EXECUTABLE} -o - -fshader-stage=compute --target-env=vulkan1.3 "${TEST_SHADER_FILE}" + OUTPUT_VARIABLE glslc_output + ERROR_VARIABLE glslc_error + ) + + # Check if error message contains extension not supported + if (${glslc_error} MATCHES ".*extension not supported: ${EXTENSION_NAME}.*") + message(STATUS "${EXTENSION_NAME} not supported by glslc") + set(${RESULT_VARIABLE} OFF PARENT_SCOPE) + else() + message(STATUS "${EXTENSION_NAME} supported by glslc") + set(${RESULT_VARIABLE} ON PARENT_SCOPE) + add_compile_definitions(${RESULT_VARIABLE}) + endif() +endfunction() + if (Vulkan_FOUND) message(STATUS "Vulkan found") @@ -23,69 +47,30 @@ if (Vulkan_FOUND) ../../include/ggml-vulkan.h ) - # Compile a test shader to determine whether GL_KHR_cooperative_matrix is supported. - # If it's not, there will be an error to stderr. - # If it's supported, set a define to indicate that we should compile those shaders - execute_process(COMMAND ${Vulkan_GLSLC_EXECUTABLE} -o - -fshader-stage=compute --target-env=vulkan1.3 "${CMAKE_CURRENT_SOURCE_DIR}/vulkan-shaders/test_coopmat_support.comp" - OUTPUT_VARIABLE glslc_output - ERROR_VARIABLE glslc_error) - - if (${glslc_error} MATCHES ".*extension not supported: GL_KHR_cooperative_matrix.*") - message(STATUS "GL_KHR_cooperative_matrix not supported by glslc") - set(GGML_VULKAN_COOPMAT_GLSLC_SUPPORT OFF) - else() - message(STATUS "GL_KHR_cooperative_matrix supported by glslc") - set(GGML_VULKAN_COOPMAT_GLSLC_SUPPORT ON) - add_compile_definitions(GGML_VULKAN_COOPMAT_GLSLC_SUPPORT) - endif() - - # Compile a test shader to determine whether GL_NV_cooperative_matrix2 is supported. - # If it's not, there will be an error to stderr. - # If it's supported, set a define to indicate that we should compile those shaders - execute_process(COMMAND ${Vulkan_GLSLC_EXECUTABLE} -o - -fshader-stage=compute --target-env=vulkan1.3 "${CMAKE_CURRENT_SOURCE_DIR}/vulkan-shaders/test_coopmat2_support.comp" - OUTPUT_VARIABLE glslc_output - ERROR_VARIABLE glslc_error) - - if (${glslc_error} MATCHES ".*extension not supported: GL_NV_cooperative_matrix2.*") - message(STATUS "GL_NV_cooperative_matrix2 not supported by glslc") - set(GGML_VULKAN_COOPMAT2_GLSLC_SUPPORT OFF) - else() - message(STATUS "GL_NV_cooperative_matrix2 supported by glslc") - set(GGML_VULKAN_COOPMAT2_GLSLC_SUPPORT ON) - add_compile_definitions(GGML_VULKAN_COOPMAT2_GLSLC_SUPPORT) - endif() - - # Compile a test shader to determine whether GL_EXT_integer_dot_product is supported. - # If it's not, there will be an error to stderr. - # If it's supported, set a define to indicate that we should compile those shaders - execute_process(COMMAND ${Vulkan_GLSLC_EXECUTABLE} -o - -fshader-stage=compute --target-env=vulkan1.3 "${CMAKE_CURRENT_SOURCE_DIR}/vulkan-shaders/test_integer_dot_support.comp" - OUTPUT_VARIABLE glslc_output - ERROR_VARIABLE glslc_error) + # Test all shader extensions + test_shader_extension_support( + "GL_KHR_cooperative_matrix" + "${CMAKE_CURRENT_SOURCE_DIR}/vulkan-shaders/test_coopmat_support.comp" + "GGML_VULKAN_COOPMAT_GLSLC_SUPPORT" + ) - if (${glslc_error} MATCHES ".*extension not supported: GL_EXT_integer_dot_product.*") - message(STATUS "GL_EXT_integer_dot_product not supported by glslc") - set(GGML_VULKAN_INTEGER_DOT_GLSLC_SUPPORT OFF) - else() - message(STATUS "GL_EXT_integer_dot_product supported by glslc") - set(GGML_VULKAN_INTEGER_DOT_GLSLC_SUPPORT ON) - add_compile_definitions(GGML_VULKAN_INTEGER_DOT_GLSLC_SUPPORT) - endif() + test_shader_extension_support( + "GL_NV_cooperative_matrix2" + "${CMAKE_CURRENT_SOURCE_DIR}/vulkan-shaders/test_coopmat2_support.comp" + "GGML_VULKAN_COOPMAT2_GLSLC_SUPPORT" + ) - # Compile a test shader to determine whether GL_EXT_bfloat16 is supported. - # If it's not, there will be an error to stderr. - # If it's supported, set a define to indicate that we should compile those shaders - execute_process(COMMAND ${Vulkan_GLSLC_EXECUTABLE} -o - -fshader-stage=compute --target-env=vulkan1.3 "${CMAKE_CURRENT_SOURCE_DIR}/vulkan-shaders/test_bfloat16_support.comp" - OUTPUT_VARIABLE glslc_output - ERROR_VARIABLE glslc_error) + test_shader_extension_support( + "GL_EXT_integer_dot_product" + "${CMAKE_CURRENT_SOURCE_DIR}/vulkan-shaders/test_integer_dot_support.comp" + "GGML_VULKAN_INTEGER_DOT_GLSLC_SUPPORT" + ) - if (${glslc_error} MATCHES ".*extension not supported: GL_EXT_bfloat16.*") - message(STATUS "GL_EXT_bfloat16 not supported by glslc") - set(GGML_VULKAN_BFLOAT16_GLSLC_SUPPORT OFF) - else() - message(STATUS "GL_EXT_bfloat16 supported by glslc") - set(GGML_VULKAN_BFLOAT16_GLSLC_SUPPORT ON) - add_compile_definitions(GGML_VULKAN_BFLOAT16_GLSLC_SUPPORT) - endif() + test_shader_extension_support( + "GL_EXT_bfloat16" + "${CMAKE_CURRENT_SOURCE_DIR}/vulkan-shaders/test_bfloat16_support.comp" + "GGML_VULKAN_BFLOAT16_GLSLC_SUPPORT" + ) target_link_libraries(ggml-vulkan PRIVATE Vulkan::Vulkan) target_include_directories(ggml-vulkan PRIVATE ${CMAKE_CURRENT_BINARY_DIR}) From 0bd487b10b3ae3b4f7434c62d2fab19e9300e900 Mon Sep 17 00:00:00 2001 From: Mason M Date: Fri, 2 May 2025 09:51:43 -0300 Subject: [PATCH 2/4] Use auto-generated file to share shader defs --- ggml/src/ggml-vulkan/CMakeLists.txt | 17 ++++++++++++---- .../ggml-vulkan/vulkan-shaders/CMakeLists.txt | 20 ++++++++----------- 2 files changed, 21 insertions(+), 16 deletions(-) diff --git a/ggml/src/ggml-vulkan/CMakeLists.txt b/ggml/src/ggml-vulkan/CMakeLists.txt index 9a49286899915..f51f21c576758 100644 --- a/ggml/src/ggml-vulkan/CMakeLists.txt +++ b/ggml/src/ggml-vulkan/CMakeLists.txt @@ -32,10 +32,18 @@ function(test_shader_extension_support EXTENSION_NAME TEST_SHADER_FILE RESULT_VA if (${glslc_error} MATCHES ".*extension not supported: ${EXTENSION_NAME}.*") message(STATUS "${EXTENSION_NAME} not supported by glslc") set(${RESULT_VARIABLE} OFF PARENT_SCOPE) + + # Append to the shader extensions definitions file + file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/vulkan-shader-extension-defs.cmake + "set(${RESULT_VARIABLE} OFF)\n") else() message(STATUS "${EXTENSION_NAME} supported by glslc") set(${RESULT_VARIABLE} ON PARENT_SCOPE) add_compile_definitions(${RESULT_VARIABLE}) + + # Append to the shader extensions definitions file + file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/vulkan-shader-extension-defs.cmake + "set(${RESULT_VARIABLE} ON)\nadd_compile_definitions(${RESULT_VARIABLE})\n") endif() endfunction() @@ -47,6 +55,10 @@ if (Vulkan_FOUND) ../../include/ggml-vulkan.h ) + # Create the shader extensions definitions file + file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/vulkan-shader-extension-defs.cmake + "# Auto-generated file with Vulkan shader extension support definitions\n\n") + # Test all shader extensions test_shader_extension_support( "GL_KHR_cooperative_matrix" @@ -140,10 +152,7 @@ if (Vulkan_FOUND) SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/vulkan-shaders CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=${HOST_CMAKE_TOOLCHAIN_FILE} -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR} - -DGGML_VULKAN_COOPMAT_GLSLC_SUPPORT=${GGML_VULKAN_COOPMAT_GLSLC_SUPPORT} - -DGGML_VULKAN_COOPMAT2_GLSLC_SUPPORT=${GGML_VULKAN_COOPMAT2_GLSLC_SUPPORT} - -DGGML_VULKAN_INTEGER_DOT_GLSLC_SUPPORT=${GGML_VULKAN_INTEGER_DOT_GLSLC_SUPPORT} - -DGGML_VULKAN_BFLOAT16_GLSLC_SUPPORT=${GGML_VULKAN_BFLOAT16_GLSLC_SUPPORT} + -DVULKAN_SHADER_EXTENSIONS_FILE=${CMAKE_CURRENT_BINARY_DIR}/vulkan-shader-extension-defs.cmake BUILD_COMMAND ${CMAKE_COMMAND} --build . INSTALL_COMMAND ${CMAKE_COMMAND} --install . INSTALL_DIR ${CMAKE_BINARY_DIR} diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/CMakeLists.txt b/ggml/src/ggml-vulkan/vulkan-shaders/CMakeLists.txt index ad13f69b3fb1a..5540224f7a8ed 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/CMakeLists.txt +++ b/ggml/src/ggml-vulkan/vulkan-shaders/CMakeLists.txt @@ -1,20 +1,16 @@ cmake_minimum_required(VERSION 3.19) project("vulkan-shaders-gen" C CXX) -find_package (Threads REQUIRED) +find_package(Threads REQUIRED) -if (GGML_VULKAN_COOPMAT_GLSLC_SUPPORT) - add_compile_definitions(GGML_VULKAN_COOPMAT_GLSLC_SUPPORT) -endif() -if (GGML_VULKAN_COOPMAT2_GLSLC_SUPPORT) - add_compile_definitions(GGML_VULKAN_COOPMAT2_GLSLC_SUPPORT) -endif() -if (GGML_VULKAN_INTEGER_DOT_GLSLC_SUPPORT) - add_compile_definitions(GGML_VULKAN_INTEGER_DOT_GLSLC_SUPPORT) -endif() -if (GGML_VULKAN_BFLOAT16_GLSLC_SUPPORT) - add_compile_definitions(GGML_VULKAN_BFLOAT16_GLSLC_SUPPORT) +# Include the shader extensions definitions file +if(NOT DEFINED VULKAN_SHADER_EXTENSIONS_FILE OR NOT EXISTS "${VULKAN_SHADER_EXTENSIONS_FILE}") + message(FATAL_ERROR "VULKAN_SHADER_EXTENSIONS_FILE must be defined and must exist") endif() + +message(STATUS "Loading shader extension definitions from: ${VULKAN_SHADER_EXTENSIONS_FILE}") +include("${VULKAN_SHADER_EXTENSIONS_FILE}") + set(TARGET vulkan-shaders-gen) add_executable(${TARGET} vulkan-shaders-gen.cpp) install(TARGETS ${TARGET} RUNTIME) From 311719ca30eed5c369a738a57fd776c6ea4139a5 Mon Sep 17 00:00:00 2001 From: Mason M Date: Fri, 2 May 2025 10:38:13 -0300 Subject: [PATCH 3/4] unify vulkan-shaders-gen build process --- ggml/src/ggml-vulkan/CMakeLists.txt | 61 +++++++++++-------- .../ggml-vulkan/vulkan-shaders/CMakeLists.txt | 12 ++++ 2 files changed, 46 insertions(+), 27 deletions(-) diff --git a/ggml/src/ggml-vulkan/CMakeLists.txt b/ggml/src/ggml-vulkan/CMakeLists.txt index f51f21c576758..28bcab6410d5f 100644 --- a/ggml/src/ggml-vulkan/CMakeLists.txt +++ b/ggml/src/ggml-vulkan/CMakeLists.txt @@ -121,16 +121,8 @@ if (Vulkan_FOUND) add_compile_definitions(GGML_VULKAN_RUN_TESTS) endif() - if (NOT CMAKE_CROSSCOMPILING) - add_subdirectory(vulkan-shaders) - if (MSVC) - foreach(CONFIG ${CMAKE_CONFIGURATION_TYPES}) - string(TOUPPER ${CONFIG} CONFIG) - set_target_properties(vulkan-shaders-gen PROPERTIES - RUNTIME_OUTPUT_DIRECTORY_${CONFIG} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) - endforeach() - endif() - else() + # Set up toolchain for host compilation whether cross-compiling or not + if (CMAKE_CROSSCOMPILING) if (GGML_VULKAN_SHADERS_GEN_TOOLCHAIN) set(HOST_CMAKE_TOOLCHAIN_FILE ${GGML_VULKAN_SHADERS_GEN_TOOLCHAIN}) else() @@ -143,22 +135,38 @@ if (Vulkan_FOUND) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cmake/host-toolchain.cmake.in ${CMAKE_BINARY_DIR}/host-toolchain.cmake @ONLY) set(HOST_CMAKE_TOOLCHAIN_FILE ${CMAKE_BINARY_DIR}/host-toolchain.cmake) endif() - message(STATUS "vulkan-shaders-gen toolchain file: ${HOST_CMAKE_TOOLCHAIN_FILE}") + else() + # For non-cross-compiling, use empty toolchain (use host compiler) + set(HOST_CMAKE_TOOLCHAIN_FILE "") + endif() + + # Always use ExternalProject_Add approach + include(ExternalProject) + + # Construct CMake arguments + set(VULKAN_SHADER_GEN_CMAKE_ARGS + -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR} + -DVULKAN_SHADER_EXTENSIONS_FILE=${CMAKE_CURRENT_BINARY_DIR}/vulkan-shader-extension-defs.cmake + -DCMAKE_RUNTIME_OUTPUT_DIRECTORY=${CMAKE_RUNTIME_OUTPUT_DIRECTORY} + ) - include(ExternalProject) - # Native build through ExternalProject_Add - ExternalProject_Add( - vulkan-shaders-gen - SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/vulkan-shaders - CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=${HOST_CMAKE_TOOLCHAIN_FILE} - -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR} - -DVULKAN_SHADER_EXTENSIONS_FILE=${CMAKE_CURRENT_BINARY_DIR}/vulkan-shader-extension-defs.cmake - BUILD_COMMAND ${CMAKE_COMMAND} --build . - INSTALL_COMMAND ${CMAKE_COMMAND} --install . - INSTALL_DIR ${CMAKE_BINARY_DIR} - ) - ExternalProject_Add_StepTargets(vulkan-shaders-gen build install) + # Add toolchain file if cross-compiling + if (CMAKE_CROSSCOMPILING) + list(APPEND VULKAN_SHADER_GEN_CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=${HOST_CMAKE_TOOLCHAIN_FILE}) + message(STATUS "vulkan-shaders-gen toolchain file: ${HOST_CMAKE_TOOLCHAIN_FILE}") endif() + + # Native build through ExternalProject_Add + ExternalProject_Add( + vulkan-shaders-gen + SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/vulkan-shaders + CMAKE_ARGS ${VULKAN_SHADER_GEN_CMAKE_ARGS} + BUILD_COMMAND ${CMAKE_COMMAND} --build . + INSTALL_COMMAND ${CMAKE_COMMAND} --install . + INSTALL_DIR ${CMAKE_BINARY_DIR} + ) + ExternalProject_Add_StepTargets(vulkan-shaders-gen build install) + set (_ggml_vk_host_suffix $,.exe,>) set (_ggml_vk_genshaders_cmd ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/vulkan-shaders-gen${_ggml_vk_host_suffix}) set (_ggml_vk_header ${CMAKE_CURRENT_BINARY_DIR}/ggml-vulkan-shaders.hpp) @@ -169,9 +177,8 @@ if (Vulkan_FOUND) file(GLOB _ggml_vk_shader_deps "${_ggml_vk_input_dir}/*.comp") set (_ggml_vk_shader_deps ${_ggml_vk_shader_deps} vulkan-shaders-gen) - if (CMAKE_CROSSCOMPILING) - set(_ggml_vk_shader_deps ${_ggml_vk_shader_deps} vulkan-shaders-gen-build vulkan-shaders-gen-install) - endif() + # Add build and install dependencies for all builds + set(_ggml_vk_shader_deps ${_ggml_vk_shader_deps} vulkan-shaders-gen-build vulkan-shaders-gen-install) add_custom_command( OUTPUT ${_ggml_vk_header} diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/CMakeLists.txt b/ggml/src/ggml-vulkan/vulkan-shaders/CMakeLists.txt index 5540224f7a8ed..ab93d6c5e972c 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/CMakeLists.txt +++ b/ggml/src/ggml-vulkan/vulkan-shaders/CMakeLists.txt @@ -16,3 +16,15 @@ add_executable(${TARGET} vulkan-shaders-gen.cpp) install(TARGETS ${TARGET} RUNTIME) target_compile_features(${TARGET} PRIVATE cxx_std_17) target_link_libraries(vulkan-shaders-gen PUBLIC Threads::Threads) + +# Configure output directories for MSVC builds +if(MSVC) + # Get the main project's runtime output directory if possible + if(DEFINED CMAKE_RUNTIME_OUTPUT_DIRECTORY) + foreach(CONFIG ${CMAKE_CONFIGURATION_TYPES}) + string(TOUPPER ${CONFIG} CONFIG) + set_target_properties(${TARGET} PROPERTIES + RUNTIME_OUTPUT_DIRECTORY_${CONFIG} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) + endforeach() + endif() +endif() From 9af47ae6446b426d10497be3657341d23753c411 Mon Sep 17 00:00:00 2001 From: Mason M Date: Tue, 13 May 2025 09:40:37 -0300 Subject: [PATCH 4/4] Remove auto-generated extension file --- ggml/src/ggml-vulkan/CMakeLists.txt | 26 +++++-------------- .../ggml-vulkan/vulkan-shaders/CMakeLists.txt | 23 +++++++++++----- 2 files changed, 23 insertions(+), 26 deletions(-) diff --git a/ggml/src/ggml-vulkan/CMakeLists.txt b/ggml/src/ggml-vulkan/CMakeLists.txt index 28bcab6410d5f..16e10a9f399d5 100644 --- a/ggml/src/ggml-vulkan/CMakeLists.txt +++ b/ggml/src/ggml-vulkan/CMakeLists.txt @@ -21,29 +21,23 @@ endfunction() # TEST_SHADER_FILE - Path to the test shader file # RESULT_VARIABLE - Name of the variable to set (ON/OFF) based on test result function(test_shader_extension_support EXTENSION_NAME TEST_SHADER_FILE RESULT_VARIABLE) - # Compile the test shader to determine whether the extension is supported execute_process( COMMAND ${Vulkan_GLSLC_EXECUTABLE} -o - -fshader-stage=compute --target-env=vulkan1.3 "${TEST_SHADER_FILE}" OUTPUT_VARIABLE glslc_output ERROR_VARIABLE glslc_error ) - # Check if error message contains extension not supported if (${glslc_error} MATCHES ".*extension not supported: ${EXTENSION_NAME}.*") message(STATUS "${EXTENSION_NAME} not supported by glslc") set(${RESULT_VARIABLE} OFF PARENT_SCOPE) - - # Append to the shader extensions definitions file - file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/vulkan-shader-extension-defs.cmake - "set(${RESULT_VARIABLE} OFF)\n") else() message(STATUS "${EXTENSION_NAME} supported by glslc") set(${RESULT_VARIABLE} ON PARENT_SCOPE) add_compile_definitions(${RESULT_VARIABLE}) - # Append to the shader extensions definitions file - file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/vulkan-shader-extension-defs.cmake - "set(${RESULT_VARIABLE} ON)\nadd_compile_definitions(${RESULT_VARIABLE})\n") + # Ensure the extension support is forwarded to vulkan-shaders-gen + list(APPEND VULKAN_SHADER_GEN_CMAKE_ARGS -D${RESULT_VARIABLE}=ON) + set(VULKAN_SHADER_GEN_CMAKE_ARGS "${VULKAN_SHADER_GEN_CMAKE_ARGS}" PARENT_SCOPE) endif() endfunction() @@ -55,9 +49,10 @@ if (Vulkan_FOUND) ../../include/ggml-vulkan.h ) - # Create the shader extensions definitions file - file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/vulkan-shader-extension-defs.cmake - "# Auto-generated file with Vulkan shader extension support definitions\n\n") + set(VULKAN_SHADER_GEN_CMAKE_ARGS + -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR} + -DCMAKE_RUNTIME_OUTPUT_DIRECTORY=${CMAKE_RUNTIME_OUTPUT_DIRECTORY} + ) # Test all shader extensions test_shader_extension_support( @@ -143,13 +138,6 @@ if (Vulkan_FOUND) # Always use ExternalProject_Add approach include(ExternalProject) - # Construct CMake arguments - set(VULKAN_SHADER_GEN_CMAKE_ARGS - -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR} - -DVULKAN_SHADER_EXTENSIONS_FILE=${CMAKE_CURRENT_BINARY_DIR}/vulkan-shader-extension-defs.cmake - -DCMAKE_RUNTIME_OUTPUT_DIRECTORY=${CMAKE_RUNTIME_OUTPUT_DIRECTORY} - ) - # Add toolchain file if cross-compiling if (CMAKE_CROSSCOMPILING) list(APPEND VULKAN_SHADER_GEN_CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=${HOST_CMAKE_TOOLCHAIN_FILE}) diff --git a/ggml/src/ggml-vulkan/vulkan-shaders/CMakeLists.txt b/ggml/src/ggml-vulkan/vulkan-shaders/CMakeLists.txt index ab93d6c5e972c..e60e9d1e5b5c5 100644 --- a/ggml/src/ggml-vulkan/vulkan-shaders/CMakeLists.txt +++ b/ggml/src/ggml-vulkan/vulkan-shaders/CMakeLists.txt @@ -1,15 +1,24 @@ cmake_minimum_required(VERSION 3.19) project("vulkan-shaders-gen" C CXX) -find_package(Threads REQUIRED) +find_package (Threads REQUIRED) -# Include the shader extensions definitions file -if(NOT DEFINED VULKAN_SHADER_EXTENSIONS_FILE OR NOT EXISTS "${VULKAN_SHADER_EXTENSIONS_FILE}") - message(FATAL_ERROR "VULKAN_SHADER_EXTENSIONS_FILE must be defined and must exist") +if (GGML_VULKAN_COOPMAT_GLSLC_SUPPORT) + add_compile_definitions(GGML_VULKAN_COOPMAT_GLSLC_SUPPORT) + message(STATUS "Enabling coopmat glslc support") +endif() +if (GGML_VULKAN_COOPMAT2_GLSLC_SUPPORT) + add_compile_definitions(GGML_VULKAN_COOPMAT2_GLSLC_SUPPORT) + message(STATUS "Enabling coopmat2 glslc support") +endif() +if (GGML_VULKAN_INTEGER_DOT_GLSLC_SUPPORT) + add_compile_definitions(GGML_VULKAN_INTEGER_DOT_GLSLC_SUPPORT) + message(STATUS "Enabling dot glslc support") +endif() +if (GGML_VULKAN_BFLOAT16_GLSLC_SUPPORT) + add_compile_definitions(GGML_VULKAN_BFLOAT16_GLSLC_SUPPORT) + message(STATUS "Enabling bfloat16 glslc support") endif() - -message(STATUS "Loading shader extension definitions from: ${VULKAN_SHADER_EXTENSIONS_FILE}") -include("${VULKAN_SHADER_EXTENSIONS_FILE}") set(TARGET vulkan-shaders-gen) add_executable(${TARGET} vulkan-shaders-gen.cpp)