summaryrefslogtreecommitdiffstats
path: root/tools/gfx-unit-test/precompiled-module-2.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tools/gfx-unit-test/precompiled-module-2.cpp')
-rw-r--r--tools/gfx-unit-test/precompiled-module-2.cpp65
1 files changed, 53 insertions, 12 deletions
diff --git a/tools/gfx-unit-test/precompiled-module-2.cpp b/tools/gfx-unit-test/precompiled-module-2.cpp
index ca9f8b565..792f328b0 100644
--- a/tools/gfx-unit-test/precompiled-module-2.cpp
+++ b/tools/gfx-unit-test/precompiled-module-2.cpp
@@ -17,7 +17,7 @@ static Slang::Result precompileProgram(
gfx::IDevice* device,
ISlangMutableFileSystem* fileSys,
const char* shaderModuleName,
- bool precompileToTarget)
+ PrecompilationMode precompilationMode)
{
Slang::ComPtr<slang::ISession> slangSession;
SLANG_RETURN_ON_FAIL(device->getSlangSession(slangSession.writeRef()));
@@ -37,7 +37,8 @@ static Slang::Result precompileProgram(
if (!module)
return SLANG_FAIL;
- if (precompileToTarget)
+ if (precompilationMode == PrecompilationMode::InternalLink ||
+ precompilationMode == PrecompilationMode::ExternalLink)
{
SlangCompileTarget target;
switch (device->getDeviceInfo().deviceType)
@@ -82,7 +83,7 @@ static Slang::Result precompileProgram(
void precompiledModule2TestImplCommon(
IDevice* device,
UnitTestContext* context,
- bool precompileToTarget)
+ PrecompilationMode precompilationMode)
{
Slang::ComPtr<ITransientResourceHeap> transientHeap;
ITransientResourceHeap::Desc transientHeapDesc = {};
@@ -100,7 +101,7 @@ void precompiledModule2TestImplCommon(
device,
memoryFileSystem.get(),
"precompiled-module-imported",
- precompileToTarget));
+ precompilationMode));
// Next, load the precompiled slang program.
Slang::ComPtr<slang::ISession> slangSession;
@@ -121,6 +122,17 @@ void precompiledModule2TestImplCommon(
}
sessionDesc.targets = &targetDesc;
sessionDesc.fileSystem = memoryFileSystem.get();
+
+ Slang::List<slang::CompilerOptionEntry> options;
+ slang::CompilerOptionEntry skipDownstreamLinkingOption;
+ skipDownstreamLinkingOption.name = slang::CompilerOptionName::SkipDownstreamLinking;
+ skipDownstreamLinkingOption.value.kind = slang::CompilerOptionValueKind::Int;
+ skipDownstreamLinkingOption.value.intValue0 =
+ precompilationMode == PrecompilationMode::ExternalLink;
+ options.add(skipDownstreamLinkingOption);
+
+ sessionDesc.compilerOptionEntries = options.getBuffer();
+ sessionDesc.compilerOptionEntryCount = options.getCount();
auto globalSession = slangSession->getGlobalSession();
globalSession->createSession(sessionDesc, slangSession.writeRef());
@@ -147,7 +159,8 @@ void precompiledModule2TestImplCommon(
shaderProgram,
"precompiled-module",
"computeMain",
- slangReflection));
+ slangReflection,
+ precompilationMode));
ComputePipelineStateDesc pipelineDesc = {};
pipelineDesc.program = shaderProgram.get();
@@ -208,12 +221,17 @@ void precompiledModule2TestImplCommon(
void precompiledModule2TestImpl(IDevice* device, UnitTestContext* context)
{
- precompiledModule2TestImplCommon(device, context, false);
+ precompiledModule2TestImplCommon(device, context, PrecompilationMode::SlangIR);
+}
+
+void precompiledTargetModule2InternalLinkTestImpl(IDevice* device, UnitTestContext* context)
+{
+ precompiledModule2TestImplCommon(device, context, PrecompilationMode::InternalLink);
}
-void precompiledTargetModule2TestImpl(IDevice* device, UnitTestContext* context)
+void precompiledTargetModule2ExternalLinkTestImpl(IDevice* device, UnitTestContext* context)
{
- precompiledModule2TestImplCommon(device, context, true);
+ precompiledModule2TestImplCommon(device, context, PrecompilationMode::ExternalLink);
}
SLANG_UNIT_TEST(precompiledModule2D3D12)
@@ -221,19 +239,42 @@ SLANG_UNIT_TEST(precompiledModule2D3D12)
runTestImpl(precompiledModule2TestImpl, unitTestContext, Slang::RenderApiFlag::D3D12);
}
-SLANG_UNIT_TEST(precompiledTargetModule2D3D12)
+SLANG_UNIT_TEST(precompiledTargetModuleInternalLink2D3D12)
{
- runTestImpl(precompiledTargetModule2TestImpl, unitTestContext, Slang::RenderApiFlag::D3D12);
+ runTestImpl(
+ precompiledTargetModule2InternalLinkTestImpl,
+ unitTestContext,
+ Slang::RenderApiFlag::D3D12);
}
+/*
+// Unavailable on D3D12/DXIL currently
+SLANG_UNIT_TEST(precompiledTargetModuleExternalLink2D3D12)
+{
+ runTestImpl(precompiledTargetModule2ExternalLinkTestImpl, unitTestContext,
+Slang::RenderApiFlag::D3D12);
+}
+*/
+
SLANG_UNIT_TEST(precompiledModule2Vulkan)
{
runTestImpl(precompiledModule2TestImpl, unitTestContext, Slang::RenderApiFlag::Vulkan);
}
-SLANG_UNIT_TEST(precompiledTargetModule2Vulkan)
+SLANG_UNIT_TEST(precompiledTargetModule2InternalLinkVulkan)
+{
+ runTestImpl(
+ precompiledTargetModule2InternalLinkTestImpl,
+ unitTestContext,
+ Slang::RenderApiFlag::Vulkan);
+}
+
+SLANG_UNIT_TEST(precompiledTargetModule2ExternalLinkVulkan)
{
- runTestImpl(precompiledTargetModule2TestImpl, unitTestContext, Slang::RenderApiFlag::Vulkan);
+ runTestImpl(
+ precompiledTargetModule2ExternalLinkTestImpl,
+ unitTestContext,
+ Slang::RenderApiFlag::Vulkan);
}
} // namespace gfx_test