From 7f0ccc5580faa43c2554d9d016c27ebe069362c5 Mon Sep 17 00:00:00 2001 From: jsmall-nvidia Date: Wed, 28 Nov 2018 17:56:32 -0500 Subject: * Renamed spSessionHasCompileTargetSupport to spSessionCheckCompileTargetSupport. (#728) * Improved return codes from spSessionCheckCompileTargetSupport --- slang.h | 7 +++++-- source/slang/compiler.cpp | 37 +++++++++++++++++++------------------ source/slang/compiler.h | 2 +- source/slang/slang.cpp | 4 ++-- tools/slang-test/main.cpp | 2 +- 5 files changed, 28 insertions(+), 24 deletions(-) diff --git a/slang.h b/slang.h index 1775e0de4..4e7fd2f7a 100644 --- a/slang.h +++ b/slang.h @@ -849,8 +849,11 @@ extern "C" @brief Returns SLANG_OK if a the compilation target is supported for this session @param session Session @param target The compilation target to test - @return SLANG_OK if the target is available */ - SLANG_API SlangResult spSessionHasCompileTargetSupport( + @return SLANG_OK if the target is available + SLANG_E_NOT_IMPLEMENTED if not implemented in this build + SLANG_E_NOT_FOUND if other resources (such as shared libraries) required to make target work could not be found + SLANG_FAIL other kinds of failures */ + SLANG_API SlangResult spSessionCheckCompileTargetSupport( SlangSession* session, SlangCompileTarget target); diff --git a/source/slang/compiler.cpp b/source/slang/compiler.cpp index 1e514812a..37e9827f8 100644 --- a/source/slang/compiler.cpp +++ b/source/slang/compiler.cpp @@ -181,31 +181,33 @@ namespace Slang } - bool hasCodeGenTarget(Session* session, CodeGenTarget target) + SlangResult checkCompileTargetSupport(Session* session, CodeGenTarget target) { switch (target) { - case CodeGenTarget::Unknown: return false; - case CodeGenTarget::None: return true; + case CodeGenTarget::None: + { + return SLANG_OK; + } case CodeGenTarget::GLSL: case CodeGenTarget::GLSL_Vulkan: case CodeGenTarget::GLSL_Vulkan_OneDesc: { // Can always output GLSL - return true; + return SLANG_OK; } case CodeGenTarget::HLSL: { // Can always output HLSL - return true; + return SLANG_OK; } case CodeGenTarget::SPIRVAssembly: case CodeGenTarget::SPIRV: { #if SLANG_ENABLE_GLSLANG_SUPPORT - return session->getOrLoadSharedLibrary(Slang::SharedLibraryType::Glslang, nullptr) != nullptr; + return session->getOrLoadSharedLibrary(Slang::SharedLibraryType::Glslang, nullptr) ? SLANG_OK : SLANG_E_NOT_FOUND; #else - return false; + return SLANG_E_NOT_IMPLEMENTED; #endif } case CodeGenTarget::DXBytecode: @@ -213,9 +215,9 @@ namespace Slang { #if SLANG_ENABLE_DXBC_SUPPORT // Must have fxc - return session->getOrLoadSharedLibrary(SharedLibraryType::Fxc, nullptr) != nullptr; + return session->getOrLoadSharedLibrary(SharedLibraryType::Fxc, nullptr) ? SLANG_OK : SLANG_E_NOT_FOUND; #else - return false; + return SLANG_E_NOT_IMPLEMENTED; #endif } @@ -224,19 +226,18 @@ namespace Slang { #if SLANG_ENABLE_DXIL_SUPPORT // Must have dxc - return session->getOrLoadSharedLibrary(SharedLibraryType::Dxc, nullptr) && - session->getOrLoadSharedLibrary(SharedLibraryType::Dxil, nullptr); + return (session->getOrLoadSharedLibrary(SharedLibraryType::Dxc, nullptr) && + session->getOrLoadSharedLibrary(SharedLibraryType::Dxil, nullptr)) ? SLANG_OK : SLANG_E_NOT_FOUND; #else - return false; + return SLANG_E_NOT_IMPLEMENTED; #endif } - - default: - { - SLANG_ASSERT(!"Unhandled target"); - return false; - } + + default: break; } + + SLANG_ASSERT(!"Unhandled target"); + return SLANG_FAIL; } // diff --git a/source/slang/compiler.h b/source/slang/compiler.h index 0eaf6e8e9..7be5b332d 100644 --- a/source/slang/compiler.h +++ b/source/slang/compiler.h @@ -500,7 +500,7 @@ namespace Slang CodeGenTarget target); /* Returns true if a codeGen target is available. */ - bool hasCodeGenTarget(Session* session, CodeGenTarget target); + SlangResult checkCompileTargetSupport(Session* session, CodeGenTarget target); struct TypeCheckingCache; // diff --git a/source/slang/slang.cpp b/source/slang/slang.cpp index ef71430fc..8fe08884e 100644 --- a/source/slang/slang.cpp +++ b/source/slang/slang.cpp @@ -1147,12 +1147,12 @@ SLANG_API ISlangSharedLibraryLoader* spSessionGetSharedLibraryLoader( return (s->sharedLibraryLoader == Slang::DefaultSharedLibraryLoader::getSingleton()) ? nullptr : s->sharedLibraryLoader.get(); } -SLANG_API SlangResult spSessionHasCompileTargetSupport( +SLANG_API SlangResult spSessionCheckCompileTargetSupport( SlangSession* session, SlangCompileTarget target) { auto s = SESSION(session); - return Slang::hasCodeGenTarget(s, Slang::CodeGenTarget(target)) ? SLANG_OK : SLANG_FAIL; + return Slang::checkCompileTargetSupport(s, Slang::CodeGenTarget(target)); } SLANG_API SlangCompileRequest* spCreateCompileRequest( diff --git a/tools/slang-test/main.cpp b/tools/slang-test/main.cpp index 9ce92f5bb..f710d63f2 100644 --- a/tools/slang-test/main.cpp +++ b/tools/slang-test/main.cpp @@ -944,7 +944,7 @@ TestResult runCrossCompilerTest(TestContext* context, TestInput& input) SlangCompileTarget target = _getCompileTarget(args[targetIndex + 1].getUnownedSlice()); // Check the session supports it. If not we ignore it - if (SLANG_FAILED(spSessionHasCompileTargetSupport(context->getSession(), target))) + if (SLANG_FAILED(spSessionCheckCompileTargetSupport(context->getSession(), target))) { return TestResult::Ignored; } -- cgit v1.2.3