From a07be761464b6460e4cd0235a3faa183ca798979 Mon Sep 17 00:00:00 2001 From: Jaroslaw Chodor Date: Mon, 2 Nov 2020 17:49:56 +0100 Subject: [PATCH] ocloc - don't require device for src->spv Change-Id: Idb2acd9af4e09f59958e3bc622885423a3f79227 --- .../offline_compiler/offline_compiler_tests.cpp | 17 +++++++++++++++++ .../source/offline_compiler.cpp | 12 +++++++----- 2 files changed, 24 insertions(+), 5 deletions(-) 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 9c4d054bb7..6beeec48f1 100644 --- a/opencl/test/unit_test/offline_compiler/offline_compiler_tests.cpp +++ b/opencl/test/unit_test/offline_compiler/offline_compiler_tests.cpp @@ -1358,4 +1358,21 @@ TEST(OclocCompile, whenDetectedPotentialInputTypeMismatchThenEmitsWarning) { } } +TEST(OclocCompile, givenCommandLineWithoutDeviceWhenCompilingToSpirvThenSucceedsButUsesEmptyExtensionString) { + MockOfflineCompiler ocloc; + + std::vector argv = { + "ocloc", + "-q", + "-file", + "test_files/copybuffer.cl", + "-spv_only"}; + + int retVal = ocloc.initialize(argv.size(), argv); + ASSERT_EQ(0, retVal); + retVal = ocloc.build(); + EXPECT_EQ(0, retVal); + EXPECT_THAT(ocloc.internalOptions.c_str(), testing::HasSubstr("-cl-ext=-all,+cl_khr_3d_image_writes")); +} + } // namespace NEO diff --git a/shared/offline_compiler/source/offline_compiler.cpp b/shared/offline_compiler/source/offline_compiler.cpp index a86fb81400..a58e68d5a0 100644 --- a/shared/offline_compiler/source/offline_compiler.cpp +++ b/shared/offline_compiler/source/offline_compiler.cpp @@ -577,18 +577,18 @@ int OfflineCompiler::parseCommandLine(size_t numArgs, const std::vectorprintf("Error: Input file name missing.\n"); retVal = INVALID_COMMAND_LINE; - } else if (deviceName.empty()) { + } else if (deviceName.empty() && (false == onlySpirV)) { argHelper->printf("Error: Device name missing.\n"); retVal = INVALID_COMMAND_LINE; } else if (!argHelper->fileExists(inputFile)) { argHelper->printf("Error: Input file %s missing.\n", inputFile.c_str()); retVal = INVALID_FILE; } else { - retVal = getHardwareInfo(deviceName.c_str()); - if (retVal != SUCCESS) { + retVal = deviceName.empty() ? 0 : getHardwareInfo(deviceName.c_str()); + if (retVal != 0) { argHelper->printf("Error: Cannot get HW Info for device %s.\n", deviceName.c_str()); - } else { - std::string extensionsList = getExtensionsList(hwInfo); + } else if (false == deviceName.empty()) { + std::string extensionsList = deviceName.empty() ? "" : getExtensionsList(hwInfo); if (requiresOpenClCFeatures(options)) { OpenClCFeaturesContainer openclCFeatures; getOpenclCFeaturesList(hwInfo, openclCFeatures); @@ -601,6 +601,8 @@ int OfflineCompiler::parseCommandLine(size_t numArgs, const std::vectorinternalOptions = CompilerOptions::concatenate("-cl-ext=-all,+cl_khr_3d_image_writes", this->internalOptions); } } }