summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjsmall-nvidia <jsmall@nvidia.com>2018-11-28 17:56:32 -0500
committerTim Foley <tfoleyNV@users.noreply.github.com>2018-11-28 14:56:32 -0800
commit7f0ccc5580faa43c2554d9d016c27ebe069362c5 (patch)
treecd958b3cb2e162c18c08583935982f0416f5a07b
parente21d5ad650130631e17662ce8f22d15315ab597a (diff)
* Renamed spSessionHasCompileTargetSupport to spSessionCheckCompileTargetSupport. (#728)
* Improved return codes from spSessionCheckCompileTargetSupport
-rw-r--r--slang.h7
-rw-r--r--source/slang/compiler.cpp37
-rw-r--r--source/slang/compiler.h2
-rw-r--r--source/slang/slang.cpp4
-rw-r--r--tools/slang-test/main.cpp2
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;
}