diff --git a/CMakeLists.txt b/CMakeLists.txt index 2e9fc8a316..b5ede5fd0a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -461,10 +461,8 @@ else() endif() message(STATUS "i915 includes dir: ${I915_INCLUDES_DIR}") -if(NOT NEO_DISABLE_BUILTINS_COMPILATION) - # Enable/Disable BuiltIns compilation during build - set(COMPILE_BUILT_INS TRUE CACHE BOOL "Enable built-in kernels compilation") -endif() +# Enable/Disable BuiltIns compilation during build +set(COMPILE_BUILT_INS TRUE CACHE BOOL "Enable built-in kernels compilation") # Changing the default executable and library output directories set(IGDRCL_OUTPUT_DIR "${IGDRCL_OPTION__OUTPUT_DIR}") diff --git a/level_zero/core/test/common/gen_kernel.cmake b/level_zero/core/test/common/gen_kernel.cmake index b639e2359b..ba8a6d9cdd 100644 --- a/level_zero/core/test/common/gen_kernel.cmake +++ b/level_zero/core/test/common/gen_kernel.cmake @@ -6,9 +6,7 @@ function(level_zero_gen_kernels target_list platform_name suffix options) - if(NOT NEO_DISABLE_BUILTINS_COMPILATION) - list(APPEND results copy_compiler_files) - endif() + list(APPEND results copy_compiler_files) set(outputdir "${TargetDir}/level_zero/${suffix}/test_files/${NEO_ARCH}/") @@ -22,6 +20,8 @@ function(level_zero_gen_kernels target_list platform_name suffix options) set(output_files ${outputpath_base}.bin ${outputpath_base}.gen + ${outputpath_base}.spv + ${outputpath_base}.dbg ) add_custom_command( @@ -34,7 +34,7 @@ function(level_zero_gen_kernels target_list platform_name suffix options) list(APPEND ${target_list} ${output_files}) else() - foreach(_file_name "bin" "gen") + foreach(_file_name "bin" "gen" "spv" "dbg") set(_file_prebuilt "${NEO_SOURCE_DIR}/../neo_test_kernels/level_zero/${suffix}/test_files/${NEO_ARCH}/${basename}_${suffix}.${_file_name}") add_custom_command( OUTPUT ${outputpath_base}.${_file_name} diff --git a/opencl/source/built_ins/kernels/CMakeLists.txt b/opencl/source/built_ins/kernels/CMakeLists.txt index ae23d31df6..9e1f884023 100644 --- a/opencl/source/built_ins/kernels/CMakeLists.txt +++ b/opencl/source/built_ins/kernels/CMakeLists.txt @@ -4,52 +4,56 @@ # SPDX-License-Identifier: MIT # -if(NOT NEO_DISABLE_BUILTINS_COMPILATION) - add_custom_target(builtins_vme_sources) - set_target_properties(builtins_vme_sources PROPERTIES FOLDER "${OPENCL_RUNTIME_PROJECTS_FOLDER}/${OPENCL_BUILTINS_PROJECTS_FOLDER}") - set(BUILTINS_OUTDIR_WITH_ARCH "${TargetDir}/built_ins/${NEO_ARCH}") - add_dependencies(${BUILTINS_BINARIES_BINDFUL_LIB_NAME} builtins_vme_sources) - add_subdirectories() - set(GENERATED_BUILTINS ${GENERATED_BUILTINS} PARENT_SCOPE) - set(GENERATED_BUILTINS_STATELESS ${GENERATED_BUILTINS_STATELESS} PARENT_SCOPE) +add_custom_target(builtins_vme_sources) +set_target_properties(builtins_vme_sources PROPERTIES FOLDER "${OPENCL_RUNTIME_PROJECTS_FOLDER}/${OPENCL_BUILTINS_PROJECTS_FOLDER}") +set(BUILTINS_OUTDIR_WITH_ARCH "${TargetDir}/built_ins/${NEO_ARCH}") +add_dependencies(${BUILTINS_BINARIES_BINDFUL_LIB_NAME} builtins_vme_sources) +add_subdirectories() +set(GENERATED_BUILTINS ${GENERATED_BUILTINS} PARENT_SCOPE) +set(GENERATED_BUILTINS_STATELESS ${GENERATED_BUILTINS_STATELESS} PARENT_SCOPE) - if("${NEO_ARCH}" STREQUAL "x32") - set(BUILTIN_OPTIONS "-cl-intel-greater-than-4GB-buffer-required") +if("${NEO_ARCH}" STREQUAL "x32") + set(BUILTIN_OPTIONS "-cl-intel-greater-than-4GB-buffer-required") +else() + set(BUILTIN_OPTIONS "") +endif() + +set(BUILTIN_OPTIONS_STATELESS + "-cl-intel-greater-than-4GB-buffer-required" +) + +if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug") + list(APPEND __ocloc__options__ "-D DEBUG") +endif() + +set(BUILTINS_INCLUDE_DIR ${TargetDir} PARENT_SCOPE) +set(BUILTIN_CPP "") + +function(get_bits_for_stateless gen_type platform_type) + # Force 32bits compiling on gen9lp for stateless builtins + if((${GEN_TYPE} STREQUAL "GEN9") AND (${PLATFORM_TYPE} STREQUAL "LP")) + set(BITS "32" PARENT_SCOPE) else() - set(BUILTIN_OPTIONS "") + set(BITS ${NEO_BITS} PARENT_SCOPE) endif() +endfunction() - set(BUILTIN_OPTIONS_STATELESS - "-cl-intel-greater-than-4GB-buffer-required" - ) +# Define function for compiling built-ins (with ocloc) +function(compile_builtin gen_type platform_type builtin bits builtin_options) + string(TOLOWER ${gen_type} gen_type_lower) + get_family_name_with_type(${gen_type} ${platform_type}) + set(OUTPUTDIR "${BUILTINS_OUTDIR_WITH_ARCH}/${gen_type_lower}") + # get filename + set(FILENAME ${builtin}) + # get name of the file w/o extension + get_filename_component(BASENAME ${builtin} NAME_WE) - if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug") - list(APPEND __ocloc__options__ "-D DEBUG") - endif() + set(OUTPUTPATH_BASE "${OUTPUTDIR}/${BASENAME}_${family_name_with_type}") - set(BUILTINS_INCLUDE_DIR ${TargetDir} PARENT_SCOPE) - set(BUILTIN_CPP "") - - function(get_bits_for_stateless gen_type platform_type) - # Force 32bits compiling on gen9lp for stateless builtins - if((${GEN_TYPE} STREQUAL "GEN9") AND (${PLATFORM_TYPE} STREQUAL "LP")) - set(BITS "32" PARENT_SCOPE) - else() - set(BITS ${NEO_BITS} PARENT_SCOPE) - endif() - endfunction() - - # Define function for compiling built-ins (with ocloc) - function(compile_builtin gen_type platform_type builtin bits builtin_options) - string(TOLOWER ${gen_type} gen_type_lower) - get_family_name_with_type(${gen_type} ${platform_type}) - set(OUTPUTDIR "${BUILTINS_OUTDIR_WITH_ARCH}/${gen_type_lower}") - # get filename - set(FILENAME ${builtin}) - # get name of the file w/o extension - get_filename_component(BASENAME ${builtin} NAME_WE) - - set(OUTPUTPATH_BASE "${OUTPUTDIR}/${BASENAME}_${family_name_with_type}") + # function returns builtin cpp filename + unset(BUILTIN_CPP) + list(APPEND __ocloc__options__ "-cl-kernel-arg-info") + if(NOT NEO_DISABLE_BUILTINS_COMPILATION) set(OUTPUT_FILES ${OUTPUTPATH_BASE}.spv ${OUTPUTPATH_BASE}.bin @@ -57,42 +61,65 @@ if(NOT NEO_DISABLE_BUILTINS_COMPILATION) ${OUTPUTPATH_BASE}.gen ) - # function returns builtin cpp filename - unset(BUILTIN_CPP) - # set variable outside function - set(BUILTIN_CPP built_ins/${NEO_ARCH}/${gen_type_lower}/${BASENAME}_${family_name_with_type}.cpp PARENT_SCOPE) - - list(APPEND __ocloc__options__ "-cl-kernel-arg-info") add_custom_command( OUTPUT ${OUTPUT_FILES} COMMAND ${ocloc_cmd_prefix} -q -file ${FILENAME} -device ${DEFAULT_SUPPORTED_${gen_type}_${platform_type}_PLATFORM} ${builtin_options} -${bits} -out_dir ${OUTPUTDIR} -options "$" WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} DEPENDS ${builtin} ocloc copy_compiler_files ) - endfunction() + # set variable outside function + set(BUILTIN_CPP built_ins/${NEO_ARCH}/${gen_type_lower}/${BASENAME}_${family_name_with_type}.cpp PARENT_SCOPE) + else() + foreach(_file_name "spv" "bin" "gen") + set(_file_prebuilt "${NEO_SOURCE_DIR}/../neo_test_kernels/built_ins/${NEO_ARCH}/${gen_type_lower}/${BASENAME}_${family_name_with_type}.${_file_name}") + if(EXISTS ${_file_prebuilt}) + add_custom_command( + OUTPUT ${OUTPUTPATH_BASE}.${_file_name} + COMMAND ${CMAKE_COMMAND} -E make_directory ${OUTPUTDIR} + COMMAND ${CMAKE_COMMAND} -E copy_if_different ${_file_prebuilt} ${OUTPUTDIR} + ) + endif() + endforeach() + set(_file_prebuilt "${NEO_SOURCE_DIR}/../neo_test_kernels/built_ins/${NEO_ARCH}/${gen_type_lower}/${BASENAME}_${family_name_with_type}.cpp") + if(EXISTS ${_file_prebuilt}) + add_custom_command( + OUTPUT ${OUTPUTPATH_BASE}.cpp + COMMAND ${CMAKE_COMMAND} -E make_directory ${OUTPUTDIR} + COMMAND ${CMAKE_COMMAND} -E copy_if_different ${_file_prebuilt} ${OUTPUTDIR} + ) + # set variable outside function + set(BUILTIN_CPP built_ins/${NEO_ARCH}/${gen_type_lower}/${BASENAME}_${family_name_with_type}.cpp PARENT_SCOPE) + endif() + endif() +endfunction() - macro(macro_for_each_gen) - foreach(PLATFORM_TYPE ${PLATFORM_TYPES}) - if(${GEN_TYPE}_HAS_${PLATFORM_TYPE}) - get_family_name_with_type(${GEN_TYPE} ${PLATFORM_TYPE}) - string(TOLOWER ${PLATFORM_TYPE} PLATFORM_TYPE_LOWER) - unset(BUILTINS_COMMANDS) - foreach(GENERATED_BUILTIN ${GENERATED_BUILTINS}) - compile_builtin(${GEN_TYPE} ${PLATFORM_TYPE} ${GENERATED_BUILTIN}.builtin_kernel ${NEO_BITS} "${BUILTIN_OPTIONS}") +macro(macro_for_each_gen) + foreach(PLATFORM_TYPE ${PLATFORM_TYPES}) + if(${GEN_TYPE}_HAS_${PLATFORM_TYPE}) + get_family_name_with_type(${GEN_TYPE} ${PLATFORM_TYPE}) + string(TOLOWER ${PLATFORM_TYPE} PLATFORM_TYPE_LOWER) + unset(BUILTINS_COMMANDS) + foreach(GENERATED_BUILTIN ${GENERATED_BUILTINS}) + compile_builtin(${GEN_TYPE} ${PLATFORM_TYPE} ${GENERATED_BUILTIN}.builtin_kernel ${NEO_BITS} "${BUILTIN_OPTIONS}") + if(NOT ${BUILTIN_CPP} STREQUAL "") list(APPEND BUILTINS_COMMANDS ${TargetDir}/${BUILTIN_CPP}) - endforeach() - get_bits_for_stateless(${GEN_TYPE} ${PLATFORM_TYPE}) - foreach(GENERATED_BUILTIN_STATELESS ${GENERATED_BUILTINS_STATELESS}) - compile_builtin(${GEN_TYPE} ${PLATFORM_TYPE} ${GENERATED_BUILTIN_STATELESS}.builtin_kernel ${BITS} "${BUILTIN_OPTIONS_STATELESS}") + endif() + endforeach() + get_bits_for_stateless(${GEN_TYPE} ${PLATFORM_TYPE}) + foreach(GENERATED_BUILTIN_STATELESS ${GENERATED_BUILTINS_STATELESS}) + compile_builtin(${GEN_TYPE} ${PLATFORM_TYPE} ${GENERATED_BUILTIN_STATELESS}.builtin_kernel ${BITS} "${BUILTIN_OPTIONS_STATELESS}") + if(NOT ${BUILTIN_CPP} STREQUAL "") list(APPEND BUILTINS_COMMANDS ${TargetDir}/${BUILTIN_CPP}) - endforeach() + endif() + endforeach() + if(NOT "${BUILTINS_COMMANDS}" STREQUAL "") set(target_name builtins_${family_name_with_type}_vme) add_custom_target(${target_name} DEPENDS ${BUILTINS_COMMANDS}) add_dependencies(builtins ${target_name}) set_target_properties(${target_name} PROPERTIES FOLDER "${OPENCL_RUNTIME_PROJECTS_FOLDER}/built_ins/${family_name_with_type}") endif() - endforeach() - endmacro() + endif() + endforeach() +endmacro() - apply_macro_for_each_gen("SUPPORTED") -endif() +apply_macro_for_each_gen("SUPPORTED") diff --git a/opencl/source/scheduler/scheduler_binary.cmake b/opencl/source/scheduler/scheduler_binary.cmake index daefa7a315..3de5226e65 100644 --- a/opencl/source/scheduler/scheduler_binary.cmake +++ b/opencl/source/scheduler/scheduler_binary.cmake @@ -36,16 +36,37 @@ function(compile_kernel target gen_type platform_type kernel) list(APPEND __ocloc__options__ "-cl-kernel-arg-info") list(APPEND __ocloc__options__ "-cl-std=CL2.0") list(APPEND __ocloc__options__ "-cl-intel-disable-a64WA") - add_custom_command( - OUTPUT ${OUTPUTPATH} - COMMAND ${ocloc_cmd_prefix} -q -file ${kernel} -device ${DEFAULT_SUPPORTED_${gen_type}_${platform_type}_PLATFORM} -cl-intel-greater-than-4GB-buffer-required -${NEO_BITS} -out_dir ${OUTPUTDIR} -cpp_file -options "$" -internal_options "-cl-intel-no-spill" - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - DEPENDS ${kernel} ocloc copy_compiler_files - ) - set(SCHEDULER_CPP ${SCHEDULER_CPP} PARENT_SCOPE) - - add_custom_target(${target} DEPENDS ${OUTPUTPATH}) - set_target_properties(${target} PROPERTIES FOLDER "${OPENCL_RUNTIME_PROJECTS_FOLDER}/${OPENCL_SCHEDULER_PROJECTS_FOLDER}/${gen_type_lower}") + if(NOT NEO_DISABLE_BUILTINS_COMPILATION) + add_custom_command( + OUTPUT ${OUTPUTPATH} + COMMAND ${ocloc_cmd_prefix} -q -file ${kernel} -device ${DEFAULT_SUPPORTED_${gen_type}_${platform_type}_PLATFORM} -cl-intel-greater-than-4GB-buffer-required -${NEO_BITS} -out_dir ${OUTPUTDIR} -cpp_file -options "$" -internal_options "-cl-intel-no-spill" + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + DEPENDS ${kernel} ocloc copy_compiler_files + ) + set(SCHEDULER_CPP ${SCHEDULER_CPP} PARENT_SCOPE) + add_custom_target(${target} DEPENDS ${OUTPUTPATH}) + set_target_properties(${target} PROPERTIES FOLDER "${OPENCL_RUNTIME_PROJECTS_FOLDER}/${OPENCL_SCHEDULER_PROJECTS_FOLDER}/${gen_type_lower}") + else() + set(_file_prebuilt "${NEO_SOURCE_DIR}/../neo_test_kernels/scheduler/${NEO_ARCH}/${gen_type_lower}/${BASENAME}_${family_name_with_type}.bin") + if(EXISTS ${_file_prebuilt}) + add_custom_command( + OUTPUT ${OUTPUTPATH} + COMMAND ${CMAKE_COMMAND} -E make_directory ${OUTPUTDIR} + COMMAND ${CMAKE_COMMAND} -E copy_if_different ${_file_prebuilt} ${OUTPUTDIR} + ) + add_custom_target(${target} DEPENDS ${OUTPUTPATH}) + set_target_properties(${target} PROPERTIES FOLDER "${OPENCL_RUNTIME_PROJECTS_FOLDER}/${OPENCL_SCHEDULER_PROJECTS_FOLDER}/${gen_type_lower}") + endif() + set(_file_prebuilt "${NEO_SOURCE_DIR}/../neo_test_kernels/scheduler/${NEO_ARCH}/${gen_type_lower}/${BASENAME}_${family_name_with_type}.cpp") + if(EXISTS ${_file_prebuilt}) + add_custom_command( + OUTPUT ${SCHEDULER_CPP} + COMMAND ${CMAKE_COMMAND} -E make_directory ${OUTPUTDIR} + COMMAND ${CMAKE_COMMAND} -E copy_if_different ${_file_prebuilt} ${OUTPUTDIR} + ) + set(SCHEDULER_CPP ${SCHEDULER_CPP} PARENT_SCOPE) + endif() + endif() endfunction() macro(macro_for_each_gen) @@ -55,13 +76,17 @@ macro(macro_for_each_gen) set(PLATFORM_2_0_LOWER ${DEFAULT_SUPPORTED_2_0_${GEN_TYPE}_${PLATFORM_TYPE}_PLATFORM}) if(COMPILE_BUILT_INS AND PLATFORM_2_0_LOWER) compile_kernel(scheduler_${family_name_with_type} ${GEN_TYPE} ${PLATFORM_TYPE} ${SCHEDULER_KERNEL}) - add_dependencies(scheduler scheduler_${family_name_with_type}) - list(APPEND SCHEDULER_TARGETS scheduler_${family_name_with_type}) + if(TARGET scheduler_${family_name_with_type}) + add_dependencies(scheduler scheduler_${family_name_with_type}) + list(APPEND SCHEDULER_TARGETS scheduler_${family_name_with_type}) + endif() list(APPEND GENERATED_SCHEDULER_CPPS ${SCHEDULER_CPP}) endif() endif() endforeach() - source_group("generated files\\${GEN_TYPE_LOWER}" FILES ${GENERATED_SCHEDULER_CPPS}) + if(NOT "${GENERATED_SCHEDULER_CPPS}" STREQUAL "") + source_group("generated files\\${GEN_TYPE_LOWER}" FILES ${GENERATED_SCHEDULER_CPPS}) + endif() endmacro() apply_macro_for_each_gen("SUPPORTED") @@ -69,8 +94,10 @@ apply_macro_for_each_gen("SUPPORTED") add_library(${SCHEDULER_BINARY_LIB_NAME} OBJECT EXCLUDE_FROM_ALL CMakeLists.txt) if(COMPILE_BUILT_INS) - target_sources(${SCHEDULER_BINARY_LIB_NAME} PUBLIC ${GENERATED_SCHEDULER_CPPS}) - set_source_files_properties(${GENERATED_SCHEDULER_CPPS} PROPERTIES GENERATED TRUE) + if(NOT "${GENERATED_SCHEDULER_CPPS}" STREQUAL "") + target_sources(${SCHEDULER_BINARY_LIB_NAME} PUBLIC ${GENERATED_SCHEDULER_CPPS}) + set_source_files_properties(${GENERATED_SCHEDULER_CPPS} PROPERTIES GENERATED TRUE) + endif() foreach(SCHEDULER_TARGET ${SCHEDULER_TARGETS}) add_dependencies(${SCHEDULER_BINARY_LIB_NAME} ${SCHEDULER_TARGET}) endforeach() diff --git a/shared/source/built_ins/kernels/CMakeLists.txt b/shared/source/built_ins/kernels/CMakeLists.txt index c1a09ed0ac..ba9efba2dc 100644 --- a/shared/source/built_ins/kernels/CMakeLists.txt +++ b/shared/source/built_ins/kernels/CMakeLists.txt @@ -4,84 +4,83 @@ # SPDX-License-Identifier: MIT # -if(NOT NEO_DISABLE_BUILTINS_COMPILATION) - add_custom_target(builtins) - set_target_properties(builtins PROPERTIES FOLDER "${SHARED_SOURCE_PROJECTS_FOLDER}/${SHARED_BUILTINS_PROJECTS_FOLDER}") - set(BUILTINS_OUTDIR_WITH_ARCH "${TargetDir}/built_ins/${NEO_ARCH}") - add_dependencies(${BUILTINS_BINARIES_BINDFUL_LIB_NAME} builtins) - add_dependencies(${BUILTINS_BINARIES_BINDLESS_LIB_NAME} builtins) - add_subdirectories() - set(GENERATED_BUILTINS ${GENERATED_BUILTINS} PARENT_SCOPE) - set(GENERATED_BUILTINS_AUX_TRANSLATION ${GENERATED_BUILTINS_AUX_TRANSLATION} PARENT_SCOPE) - set(GENERATED_BUILTINS_IMAGES ${GENERATED_BUILTINS_IMAGES} PARENT_SCOPE) - set(GENERATED_BUILTINS_STATELESS ${GENERATED_BUILTINS_STATELESS} PARENT_SCOPE) +add_custom_target(builtins) +set_target_properties(builtins PROPERTIES FOLDER "${SHARED_SOURCE_PROJECTS_FOLDER}/${SHARED_BUILTINS_PROJECTS_FOLDER}") +set(BUILTINS_OUTDIR_WITH_ARCH "${TargetDir}/built_ins/${NEO_ARCH}") +add_dependencies(${BUILTINS_BINARIES_BINDFUL_LIB_NAME} builtins) +add_dependencies(${BUILTINS_BINARIES_BINDLESS_LIB_NAME} builtins) +add_subdirectories() +set(GENERATED_BUILTINS ${GENERATED_BUILTINS} PARENT_SCOPE) +set(GENERATED_BUILTINS_AUX_TRANSLATION ${GENERATED_BUILTINS_AUX_TRANSLATION} PARENT_SCOPE) +set(GENERATED_BUILTINS_IMAGES ${GENERATED_BUILTINS_IMAGES} PARENT_SCOPE) +set(GENERATED_BUILTINS_STATELESS ${GENERATED_BUILTINS_STATELESS} PARENT_SCOPE) - if("${NEO_ARCH}" STREQUAL "x32") - set(BUILTIN_OPTIONS "-cl-intel-greater-than-4GB-buffer-required") +if("${NEO_ARCH}" STREQUAL "x32") + set(BUILTIN_OPTIONS "-cl-intel-greater-than-4GB-buffer-required") +else() + set(BUILTIN_OPTIONS "") +endif() + +set(BUILTIN_OPTIONS_STATELESS + "-cl-intel-greater-than-4GB-buffer-required" +) + +set(bindless_OPTIONS + -internal_options "-cl-intel-use-bindless-mode" +) + +set(bindful_OPTIONS + "" +) + +if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug") + list(APPEND __ocloc__options__ "-D DEBUG") +endif() + +set(BUILTINS_INCLUDE_DIR ${TargetDir} PARENT_SCOPE) +set(BUILTIN_CPP "") + +function(get_bits_for_stateless gen_type platform_type) + # Force 32bits compiling on gen9lp for stateless builtins + if((${gen_type} STREQUAL "GEN9") AND (${platform_type} STREQUAL "LP")) + set(BITS "32" PARENT_SCOPE) else() - set(BUILTIN_OPTIONS "") + set(BITS ${NEO_BITS} PARENT_SCOPE) endif() +endfunction() - set(BUILTIN_OPTIONS_STATELESS - "-cl-intel-greater-than-4GB-buffer-required" +# Define function for compiling built-ins (with ocloc) +function(compile_builtin gen_type platform_type builtin bits builtin_options mode) + string(TOLOWER ${gen_type} gen_type_lower) + get_family_name_with_type(${gen_type} ${platform_type}) + set(OUTPUTDIR "${BUILTINS_OUTDIR_WITH_ARCH}/${gen_type_lower}") + # get filename + set(FILENAME ${builtin}) + # get name of the file w/o extension + get_filename_component(BASENAME ${builtin} NAME_WE) + + set(OUTPUT_FILE_SPV + ${OUTPUTDIR}/${mode}_${BASENAME}_${family_name_with_type}.spv ) - set(bindless_OPTIONS - -internal_options "-cl-intel-use-bindless-mode" + list(APPEND __ocloc__options__ "-cl-kernel-arg-info") + set(INTERNAL_OPTIONS "${${mode}_OPTIONS}") + add_custom_command( + OUTPUT ${OUTPUT_FILE_SPV} + COMMAND ${ocloc_cmd_prefix} -q -file ${FILENAME} -spv_only -device ${DEFAULT_SUPPORTED_${gen_type}_${platform_type}_PLATFORM} ${builtin_options} -${bits} -output ${mode}_${BASENAME} -out_dir ${OUTPUTDIR} ${INTERNAL_OPTIONS} -options "$" + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + DEPENDS ${builtin} ocloc copy_compiler_files ) - - set(bindful_OPTIONS - "" - ) - - if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug") - list(APPEND __ocloc__options__ "-D DEBUG") - endif() - - set(BUILTINS_INCLUDE_DIR ${TargetDir} PARENT_SCOPE) - set(BUILTIN_CPP "") - - function(get_bits_for_stateless gen_type platform_type) - # Force 32bits compiling on gen9lp for stateless builtins - if((${gen_type} STREQUAL "GEN9") AND (${platform_type} STREQUAL "LP")) - set(BITS "32" PARENT_SCOPE) - else() - set(BITS ${NEO_BITS} PARENT_SCOPE) - endif() - endfunction() - - # Define function for compiling built-ins (with ocloc) - function(compile_builtin gen_type platform_type builtin bits builtin_options mode) - string(TOLOWER ${gen_type} gen_type_lower) - get_family_name_with_type(${gen_type} ${platform_type}) - set(OUTPUTDIR "${BUILTINS_OUTDIR_WITH_ARCH}/${gen_type_lower}") - # get filename - set(FILENAME ${builtin}) - # get name of the file w/o extension - get_filename_component(BASENAME ${builtin} NAME_WE) - - set(OUTPUT_FILE_SPV - ${OUTPUTDIR}/${mode}_${BASENAME}_${family_name_with_type}.spv + foreach(REVISION_ID ${${platform_type}_${gen_type}_REVISIONS}) + set(OUTPUT_FILE_CPP + ${OUTPUTDIR}/${mode}_${BASENAME}_${family_name_with_type}_${REVISION_ID}.cpp ) - - list(APPEND __ocloc__options__ "-cl-kernel-arg-info") - set(INTERNAL_OPTIONS "${${mode}_OPTIONS}") - add_custom_command( - OUTPUT ${OUTPUT_FILE_SPV} - COMMAND ${ocloc_cmd_prefix} -q -file ${FILENAME} -spv_only -device ${DEFAULT_SUPPORTED_${gen_type}_${platform_type}_PLATFORM} ${builtin_options} -${bits} -output ${mode}_${BASENAME} -out_dir ${OUTPUTDIR} ${INTERNAL_OPTIONS} -options "$" - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - DEPENDS ${builtin} ocloc copy_compiler_files - ) - foreach(REVISION_ID ${${platform_type}_${gen_type}_REVISIONS}) - set(OUTPUT_FILE_CPP - ${OUTPUTDIR}/${mode}_${BASENAME}_${family_name_with_type}_${REVISION_ID}.cpp - ) - set(BINARY_OUTPUT "${OUTPUTDIR}/${mode}_${BASENAME}_${REVISION_ID}_${family_name_with_type}") + set(BINARY_OUTPUT "${OUTPUTDIR}/${mode}_${BASENAME}_${REVISION_ID}_${family_name_with_type}") + if(NOT NEO_DISABLE_BUILTINS_COMPILATION) set(OUTPUT_FILES_BINARIES ${BINARY_OUTPUT}.gen ${BINARY_OUTPUT}.bin ) - list(APPEND BUILTINS_COMMANDS "${OUTPUT_FILE_CPP}") add_custom_command( OUTPUT ${OUTPUT_FILES_BINARIES} COMMAND ${ocloc_cmd_prefix} -q -file ${OUTPUT_FILE_SPV} -spirv_input -device ${DEFAULT_SUPPORTED_${gen_type}_${platform_type}_PLATFORM} ${builtin_options} -${bits} -output ${mode}_${BASENAME}_${REVISION_ID} -out_dir ${OUTPUTDIR} -revision_id ${REVISION_ID} ${INTERNAL_OPTIONS} -options "$" @@ -94,26 +93,46 @@ if(NOT NEO_DISABLE_BUILTINS_COMPILATION) WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} DEPENDS ${OUTPUT_FILES_BINARIES} $ ) - endforeach() - set(BUILTINS_COMMANDS ${BUILTINS_COMMANDS} PARENT_SCOPE) - endfunction() + list(APPEND BUILTINS_COMMANDS "${OUTPUT_FILE_CPP}") + else() + foreach(_file_name "gen" "bin") + set(_file_prebuilt "${NEO_SOURCE_DIR}/../neo_test_kernels/built_ins/${NEO_ARCH}/${gen_type_lower}/${mode}_${BASENAME}_${REVISION_ID}_${family_name_with_type}.${_file_name}") + if(EXISTS ${_file_prebuilt}) + add_custom_command( + OUTPUT ${BINARY_OUTPUT}.${_file_name} + COMMAND ${CMAKE_COMMAND} -E make_directory ${OUTPUTDIR} + COMMAND ${CMAKE_COMMAND} -E copy_if_different ${_file_prebuilt} ${OUTPUTDIR} + ) + endif() + endforeach() + set(_file_prebuilt "${NEO_SOURCE_DIR}/../neo_test_kernels/built_ins/${NEO_ARCH}/${gen_type_lower}/${mode}_${BASENAME}_${family_name_with_type}_${REVISION_ID}.cpp") + if(EXISTS ${_file_prebuilt}) + add_custom_command( + OUTPUT ${OUTPUT_FILE_CPP} + COMMAND ${CMAKE_COMMAND} -E make_directory ${OUTPUTDIR} + COMMAND ${CMAKE_COMMAND} -E copy_if_different ${_file_prebuilt} ${OUTPUTDIR} + ) + list(APPEND BUILTINS_COMMANDS "${OUTPUT_FILE_CPP}") + endif() + endif() + endforeach() + set(BUILTINS_COMMANDS ${BUILTINS_COMMANDS} PARENT_SCOPE) +endfunction() - function(generate_cpp_spirv builtin) - get_filename_component(BASENAME ${builtin} NAME_WE) - get_filename_component(DIR ${builtin} DIRECTORY) +function(generate_cpp_spirv builtin) + get_filename_component(BASENAME ${builtin} NAME_WE) + get_filename_component(DIR ${builtin} DIRECTORY) - set(OUTPUTDIR "${BUILTINS_OUTDIR_WITH_ARCH}/spirv/${DIR}") - string(REPLACE "//" "/" OUTPUTDIR ${OUTPUTDIR}) + set(OUTPUTDIR "${BUILTINS_OUTDIR_WITH_ARCH}/spirv/${DIR}") + string(REPLACE "//" "/" OUTPUTDIR ${OUTPUTDIR}) - set(INPUT_FILENAME ${builtin}.builtin_kernel) + set(INPUT_FILENAME ${builtin}.builtin_kernel) - set(GENERATED_SPV_INPUT ${OUTPUTDIR}/${BASENAME}.spv) - set(OUTPUT_FILE_CPP - ${OUTPUTDIR}/${BASENAME}.cpp - ) - - set(OUTPUT_LIST_SPV_FILES ${OUTPUT_LIST_SPV_FILES} ${OUTPUT_FILES_FOR_SPV} PARENT_SCOPE) - set(OUTPUT_LIST_CPP_FILES ${OUTPUT_LIST_CPP_FILES} ${OUTPUT_FILE_CPP} PARENT_SCOPE) + set(GENERATED_SPV_INPUT ${OUTPUTDIR}/${BASENAME}.spv) + set(OUTPUT_FILE_CPP + ${OUTPUTDIR}/${BASENAME}.cpp + ) + if(NOT NEO_DISABLE_BUILTINS_COMPILATION) add_custom_command( OUTPUT ${GENERATED_SPV_INPUT} COMMAND ${ocloc_cmd_prefix} -q -spv_only -file ${INPUT_FILENAME} -out_dir ${OUTPUTDIR} -output_no_suffix -options "-cl-kernel-arg-info" @@ -126,77 +145,99 @@ if(NOT NEO_DISABLE_BUILTINS_COMPILATION) WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} DEPENDS ${GENERATED_SPV_INPUT} $ ) - endfunction() + set(OUTPUT_LIST_CPP_FILES ${OUTPUT_LIST_CPP_FILES} ${OUTPUT_FILE_CPP} PARENT_SCOPE) + else() + set(_file_prebuilt "${NEO_SOURCE_DIR}/../neo_test_kernels/built_ins/${NEO_ARCH}/spirv/${DIR}/${BASENAME}.spv") + if(EXISTS ${_file_prebuilt}) + add_custom_command( + OUTPUT ${GENERATED_SPV_INPUT} + COMMAND ${CMAKE_COMMAND} -E make_directory ${OUTPUTDIR} + COMMAND ${CMAKE_COMMAND} -E copy_if_different ${_file_prebuilt} ${OUTPUTDIR} + ) + endif() + set(_file_prebuilt "${NEO_SOURCE_DIR}/../neo_test_kernels/built_ins/${NEO_ARCH}/spirv/${DIR}/${BASENAME}.cpp") + if(EXISTS ${_file_prebuilt}) + add_custom_command( + OUTPUT ${OUTPUT_FILE_CPP} + COMMAND ${CMAKE_COMMAND} -E make_directory ${OUTPUTDIR} + COMMAND ${CMAKE_COMMAND} -E copy_if_different ${_file_prebuilt} ${OUTPUTDIR} + ) + set(OUTPUT_LIST_CPP_FILES ${OUTPUT_LIST_CPP_FILES} ${OUTPUT_FILE_CPP} PARENT_SCOPE) + endif() + endif() +endfunction() - macro(macro_for_each_gen) - foreach(PLATFORM_TYPE ${PLATFORM_TYPES}) - if(${GEN_TYPE}_HAS_${PLATFORM_TYPE}) - unset(IMAGE_SUPPORT) - unset(AUX_TRANSLATION_SUPPORT) - GEN_CONTAINS_PLATFORMS("SUPPORTED_IMAGES" ${GEN_TYPE} IMAGE_SUPPORT) - GEN_CONTAINS_PLATFORMS("SUPPORTED_AUX_TRANSLATION" ${GEN_TYPE} AUX_TRANSLATION_SUPPORT) - get_family_name_with_type(${GEN_TYPE} ${PLATFORM_TYPE}) - string(TOLOWER ${PLATFORM_TYPE} PLATFORM_TYPE_LOWER) - get_bits_for_stateless(${GEN_TYPE} ${PLATFORM_TYPE}) - set(target_name builtins_${family_name_with_type}) - add_custom_target(${target_name}) - add_dependencies(builtins ${target_name}) - set_target_properties(${target_name} PROPERTIES FOLDER "${SHARED_SOURCE_PROJECTS_FOLDER}/${SHARED_BUILTINS_PROJECTS_FOLDER}/${family_name_with_type}") - foreach(MODE ${BIND_MODES}) - unset(BUILTINS_COMMANDS) - foreach(GENERATED_BUILTIN ${GENERATED_BUILTINS}) - compile_builtin(${GEN_TYPE} ${PLATFORM_TYPE} ${GENERATED_BUILTIN}.builtin_kernel ${NEO_BITS} "${BUILTIN_OPTIONS}" ${MODE}) - endforeach() - foreach(GENERATED_BUILTIN_STATELESS ${GENERATED_BUILTINS_STATELESS}) - compile_builtin(${GEN_TYPE} ${PLATFORM_TYPE} ${GENERATED_BUILTIN_STATELESS}.builtin_kernel ${BITS} "${BUILTIN_OPTIONS_STATELESS}" ${MODE}) - endforeach() - if(${IMAGE_SUPPORT}) - foreach(GENERATED_BUILTINS_IMAGES ${GENERATED_BUILTINS_IMAGES}) - compile_builtin(${GEN_TYPE} ${PLATFORM_TYPE} ${GENERATED_BUILTINS_IMAGES}.builtin_kernel ${NEO_BITS} "${BUILTIN_OPTIONS}" ${MODE}) - endforeach() - foreach(GENERATED_BUILTIN_IMAGES_STATELESS ${GENERATED_BUILTINS_IMAGES_STATELESS}) - compile_builtin(${GEN_TYPE} ${PLATFORM_TYPE} ${GENERATED_BUILTIN_IMAGES_STATELESS}.builtin_kernel ${BITS} "${BUILTIN_OPTIONS_STATELESS}" ${MODE}) - endforeach() - endif() - if(${AUX_TRANSLATION_SUPPORT}) - foreach(GENERATED_BUILTIN_AUX_TRANSLATION ${GENERATED_BUILTINS_AUX_TRANSLATION}) - compile_builtin(${GEN_TYPE} ${PLATFORM_TYPE} ${GENERATED_BUILTIN_AUX_TRANSLATION}.builtin_kernel ${NEO_BITS} "${BUILTIN_OPTIONS}" ${MODE}) - endforeach() - endif() - get_property(GENERATED_BUILTINS_CPPS_${MODE} GLOBAL PROPERTY GENERATED_BUILTINS_CPPS_${MODE}) - foreach(BUILTIN ${BUILTINS_COMMANDS}) - list(APPEND GENERATED_BUILTINS_CPPS_${MODE} ${BUILTIN}) - endforeach() - set_property(GLOBAL PROPERTY GENERATED_BUILTINS_CPPS_${MODE} ${GENERATED_BUILTINS_CPPS_${MODE}}) - add_custom_target(${target_name}_${MODE} DEPENDS ${BUILTINS_COMMANDS}) - add_dependencies(${target_name} ${target_name}_${MODE}) - set_target_properties(${target_name}_${MODE} PROPERTIES FOLDER "${SHARED_SOURCE_PROJECTS_FOLDER}/${SHARED_BUILTINS_PROJECTS_FOLDER}/${family_name_with_type}") +macro(macro_for_each_gen) + foreach(PLATFORM_TYPE ${PLATFORM_TYPES}) + if(${GEN_TYPE}_HAS_${PLATFORM_TYPE}) + unset(IMAGE_SUPPORT) + unset(AUX_TRANSLATION_SUPPORT) + GEN_CONTAINS_PLATFORMS("SUPPORTED_IMAGES" ${GEN_TYPE} IMAGE_SUPPORT) + GEN_CONTAINS_PLATFORMS("SUPPORTED_AUX_TRANSLATION" ${GEN_TYPE} AUX_TRANSLATION_SUPPORT) + get_family_name_with_type(${GEN_TYPE} ${PLATFORM_TYPE}) + string(TOLOWER ${PLATFORM_TYPE} PLATFORM_TYPE_LOWER) + get_bits_for_stateless(${GEN_TYPE} ${PLATFORM_TYPE}) + set(target_name builtins_${family_name_with_type}) + add_custom_target(${target_name}) + add_dependencies(builtins ${target_name}) + set_target_properties(${target_name} PROPERTIES FOLDER "${SHARED_SOURCE_PROJECTS_FOLDER}/${SHARED_BUILTINS_PROJECTS_FOLDER}/${family_name_with_type}") + foreach(MODE ${BIND_MODES}) + unset(BUILTINS_COMMANDS) + foreach(GENERATED_BUILTIN ${GENERATED_BUILTINS}) + compile_builtin(${GEN_TYPE} ${PLATFORM_TYPE} ${GENERATED_BUILTIN}.builtin_kernel ${NEO_BITS} "${BUILTIN_OPTIONS}" ${MODE}) endforeach() - endif() - endforeach() - endmacro() + foreach(GENERATED_BUILTIN_STATELESS ${GENERATED_BUILTINS_STATELESS}) + compile_builtin(${GEN_TYPE} ${PLATFORM_TYPE} ${GENERATED_BUILTIN_STATELESS}.builtin_kernel ${BITS} "${BUILTIN_OPTIONS_STATELESS}" ${MODE}) + endforeach() + if(${IMAGE_SUPPORT}) + foreach(GENERATED_BUILTINS_IMAGES ${GENERATED_BUILTINS_IMAGES}) + compile_builtin(${GEN_TYPE} ${PLATFORM_TYPE} ${GENERATED_BUILTINS_IMAGES}.builtin_kernel ${NEO_BITS} "${BUILTIN_OPTIONS}" ${MODE}) + endforeach() + foreach(GENERATED_BUILTIN_IMAGES_STATELESS ${GENERATED_BUILTINS_IMAGES_STATELESS}) + compile_builtin(${GEN_TYPE} ${PLATFORM_TYPE} ${GENERATED_BUILTIN_IMAGES_STATELESS}.builtin_kernel ${BITS} "${BUILTIN_OPTIONS_STATELESS}" ${MODE}) + endforeach() + endif() + if(${AUX_TRANSLATION_SUPPORT}) + foreach(GENERATED_BUILTIN_AUX_TRANSLATION ${GENERATED_BUILTINS_AUX_TRANSLATION}) + compile_builtin(${GEN_TYPE} ${PLATFORM_TYPE} ${GENERATED_BUILTIN_AUX_TRANSLATION}.builtin_kernel ${NEO_BITS} "${BUILTIN_OPTIONS}" ${MODE}) + endforeach() + endif() + get_property(GENERATED_BUILTINS_CPPS_${MODE} GLOBAL PROPERTY GENERATED_BUILTINS_CPPS_${MODE}) + foreach(BUILTIN ${BUILTINS_COMMANDS}) + list(APPEND GENERATED_BUILTINS_CPPS_${MODE} ${BUILTIN}) + endforeach() + set_property(GLOBAL PROPERTY GENERATED_BUILTINS_CPPS_${MODE} ${GENERATED_BUILTINS_CPPS_${MODE}}) + add_custom_target(${target_name}_${MODE} DEPENDS ${BUILTINS_COMMANDS}) + add_dependencies(${target_name} ${target_name}_${MODE}) + set_target_properties(${target_name}_${MODE} PROPERTIES FOLDER "${SHARED_SOURCE_PROJECTS_FOLDER}/${SHARED_BUILTINS_PROJECTS_FOLDER}/${family_name_with_type}") + endforeach() + endif() + endforeach() +endmacro() - file(MAKE_DIRECTORY "${BUILTINS_OUTDIR_WITH_ARCH}/spirv") - foreach(builtin ${GENERATED_BUILTINS}) - generate_cpp_spirv(${builtin}) - endforeach() - foreach(builtin_images ${GENERATED_BUILTINS_IMAGES}) - generate_cpp_spirv(${builtin_images}) - endforeach() - foreach(builtin_aux_translation ${GENERATED_BUILTINS_AUX_TRANSLATION}) - generate_cpp_spirv(${builtin_aux_translation}) - endforeach() - foreach(builtin_stateless ${GENERATED_BUILTINS_STATELESS}) - generate_cpp_spirv(${builtin_stateless}) - endforeach() - foreach(builtin_images_stateless ${GENERATED_BUILTINS_IMAGES_STATELESS}) - generate_cpp_spirv(${builtin_images_stateless}) - endforeach() +file(MAKE_DIRECTORY "${BUILTINS_OUTDIR_WITH_ARCH}/spirv") +foreach(builtin ${GENERATED_BUILTINS}) + generate_cpp_spirv(${builtin}) +endforeach() +foreach(builtin_images ${GENERATED_BUILTINS_IMAGES}) + generate_cpp_spirv(${builtin_images}) +endforeach() +foreach(builtin_aux_translation ${GENERATED_BUILTINS_AUX_TRANSLATION}) + generate_cpp_spirv(${builtin_aux_translation}) +endforeach() +foreach(builtin_stateless ${GENERATED_BUILTINS_STATELESS}) + generate_cpp_spirv(${builtin_stateless}) +endforeach() +foreach(builtin_images_stateless ${GENERATED_BUILTINS_IMAGES_STATELESS}) + generate_cpp_spirv(${builtin_images_stateless}) +endforeach() +if(NOT "${OUTPUT_LIST_CPP_FILES}" STREQUAL "") add_library(${BUILTINS_SPIRV_LIB_NAME} OBJECT ${OUTPUT_LIST_CPP_FILES}) set_target_properties(${BUILTINS_SPIRV_LIB_NAME} PROPERTIES POSITION_INDEPENDENT_CODE ON FOLDER "${SHARED_SOURCE_PROJECTS_FOLDER}/${SHARED_BUILTINS_PROJECTS_FOLDER}" - ) - apply_macro_for_each_gen("SUPPORTED") + ) endif() + +apply_macro_for_each_gen("SUPPORTED")