diff --git a/opencl/test/unit_test/offline_compiler/offline_compiler_tests.cpp b/opencl/test/unit_test/offline_compiler/offline_compiler_tests.cpp index 000fe047ed..12d755d697 100644 --- a/opencl/test/unit_test/offline_compiler/offline_compiler_tests.cpp +++ b/opencl/test/unit_test/offline_compiler/offline_compiler_tests.cpp @@ -1595,4 +1595,27 @@ TEST(OclocCompile, givenPackedDeviceBinaryFormatWhenGeneratingElfBinaryThenItIsR ASSERT_EQ(true, ocloc.generateElfBinary()); EXPECT_EQ(0, memcmp(zebin.storage.data(), ocloc.elfBinary.data(), zebin.storage.size())); } + +TEST(OclocCompile, givenSpirvInputThenDontGenerateSpirvFile) { + MockOfflineCompiler ocloc; + + std::vector argv = { + "ocloc", + "-q", + "-file", + "test_files/binary_with_zeroes", + "-out_dir", + "offline_compiler_test", + "-device", + gEnvironment->devicePrefix.c_str(), + "-spirv_input"}; + + int retVal = ocloc.initialize(argv.size(), argv); + ASSERT_EQ(0, retVal); + retVal = ocloc.build(); + EXPECT_EQ(0, retVal); + EXPECT_TRUE(compilerOutputExists("offline_compiler_test/binary_with_zeroes", "gen")); + EXPECT_TRUE(compilerOutputExists("offline_compiler_test/binary_with_zeroes", "bin")); + EXPECT_FALSE(compilerOutputExists("offline_compiler_test/binary_with_zeroes", "spv")); +} } // namespace NEO diff --git a/shared/offline_compiler/source/offline_compiler.cpp b/shared/offline_compiler/source/offline_compiler.cpp index 64829b723a..389a986453 100644 --- a/shared/offline_compiler/source/offline_compiler.cpp +++ b/shared/offline_compiler/source/offline_compiler.cpp @@ -1019,7 +1019,7 @@ void OfflineCompiler::writeOutAllFiles() { } } - if (irBinary) { + if (irBinary && !inputFileSpirV) { std::string irOutputFileName = generateFilePathForIr(fileBase) + generateOptsSuffix(); argHelper->saveOutput(irOutputFileName, irBinary, irBinarySize); diff --git a/shared/source/built_ins/kernels/CMakeLists.txt b/shared/source/built_ins/kernels/CMakeLists.txt index 12dc4aa7ad..59723fdb29 100644 --- a/shared/source/built_ins/kernels/CMakeLists.txt +++ b/shared/source/built_ins/kernels/CMakeLists.txt @@ -58,11 +58,8 @@ function(compile_builtin gen_type platform_type builtin bits builtin_options mod # get name of the file w/o extension get_filename_component(BASENAME ${builtin} NAME_WE) - set(OUTPUTPATH_BASE "${OUTPUTDIR}/${mode}_${BASENAME}_${family_name_with_type}") - set(OUTPUT_FILES - ${OUTPUTPATH_BASE}.spv - ${OUTPUTPATH_BASE}.bin - ${OUTPUTPATH_BASE}.gen + set(OUTPUT_FILE_SPV + ${OUTPUTDIR}/${mode}_${BASENAME}_${family_name_with_type}.spv ) if(NOT DEFINED cloc_cmd_prefix) @@ -79,8 +76,8 @@ function(compile_builtin gen_type platform_type builtin bits builtin_options mod list(APPEND __cloc__options__ "-cl-kernel-arg-info") set(INTERNAL_OPTIONS "${${mode}_OPTIONS}") add_custom_command( - OUTPUT ${OUTPUT_FILES} - COMMAND ${cloc_cmd_prefix} -q -file ${FILENAME} -device ${DEFAULT_SUPPORTED_${gen_type}_${platform_type}_PLATFORM} ${builtin_options} -${bits} -output ${mode}_${BASENAME} -out_dir ${OUTPUTDIR} ${INTERNAL_OPTIONS} -options "$" + OUTPUT ${OUTPUT_FILE_SPV} + COMMAND ${cloc_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 ) @@ -88,12 +85,23 @@ function(compile_builtin gen_type platform_type builtin bits builtin_options mod 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(OUTPUT_FILES_BINARIES + ${BINARY_OUTPUT}.gen + ${BINARY_OUTPUT}.bin + ) list(APPEND BUILTINS_COMMANDS "${OUTPUT_FILE_CPP}") add_custom_command( - OUTPUT ${OUTPUT_FILE_CPP} - COMMAND $ --file ${OUTPUTPATH_BASE}.gen --output ${OUTPUT_FILE_CPP} --array ${mode}_${BASENAME} --platform ${family_name_with_type} --revision_id ${REVISION_ID} + OUTPUT ${OUTPUT_FILES_BINARIES} + COMMAND ${cloc_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 "$" WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} - DEPENDS ${OUTPUTPATH_BASE}.gen $ + DEPENDS ${OUTPUT_FILE_SPV} ocloc copy_compiler_files + ) + add_custom_command( + OUTPUT ${OUTPUT_FILE_CPP} + COMMAND $ --file ${BINARY_OUTPUT}.gen --output ${OUTPUT_FILE_CPP} --array ${mode}_${BASENAME} --platform ${family_name_with_type} --revision_id ${REVISION_ID} + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + DEPENDS ${OUTPUT_FILES_BINARIES} $ ) endforeach() set(BUILTINS_COMMANDS ${BUILTINS_COMMANDS} PARENT_SCOPE)