summaryrefslogtreecommitdiff
path: root/tools/gfx
diff options
context:
space:
mode:
Diffstat (limited to 'tools/gfx')
-rw-r--r--tools/gfx/renderer-shared.cpp10
-rw-r--r--tools/gfx/vulkan/vk-device.h3
-rw-r--r--tools/gfx/vulkan/vk-shader-program.cpp16
3 files changed, 22 insertions, 7 deletions
diff --git a/tools/gfx/renderer-shared.cpp b/tools/gfx/renderer-shared.cpp
index ae4ea3eef..edd271ecb 100644
--- a/tools/gfx/renderer-shared.cpp
+++ b/tools/gfx/renderer-shared.cpp
@@ -1133,11 +1133,13 @@ Result ShaderProgramBase::compileShaders(RendererBase* device)
kernelCodes.add(downstreamIR);
}
- // If target precompilation was used, kernelCode may only represent the
- // glue code holding together the bits of precompiled target IR.
- // Collect those dependency target IRs too.
+ // If target precompilation with deferred downstream linking is enabled,
+ // kernelCode may only represent the glue code holding together the
+ // bits of precompiled target IR. It's the application's job to pull it
+ // together. Collect those dependency target IRs too.
ComPtr<slang::IModulePrecompileService_Experimental> componentPrecompileService;
- if (entryPointComponent->queryInterface(
+ if (this->desc.downstreamLinkMode == DownstreamLinkMode::Deferred &&
+ entryPointComponent->queryInterface(
slang::IModulePrecompileService_Experimental::getTypeGuid(),
(void**)componentPrecompileService.writeRef()) == SLANG_OK)
{
diff --git a/tools/gfx/vulkan/vk-device.h b/tools/gfx/vulkan/vk-device.h
index 27cc4c3ce..06e19ad7e 100644
--- a/tools/gfx/vulkan/vk-device.h
+++ b/tools/gfx/vulkan/vk-device.h
@@ -223,6 +223,9 @@ public:
VkSampler m_defaultSampler;
RefPtr<FramebufferImpl> m_emptyFramebuffer;
+
+ // If true, slang will skip downstream linking, so we need to do it ourselves
+ bool m_skipsDownstreamLinking = false;
};
} // namespace vk
diff --git a/tools/gfx/vulkan/vk-shader-program.cpp b/tools/gfx/vulkan/vk-shader-program.cpp
index 1627c95a7..2dd9b0326 100644
--- a/tools/gfx/vulkan/vk-shader-program.cpp
+++ b/tools/gfx/vulkan/vk-shader-program.cpp
@@ -74,10 +74,20 @@ Result ShaderProgramImpl::createShaderModule(
slang::EntryPointReflection* entryPointInfo,
List<ComPtr<ISlangBlob>>& kernelCodes)
{
- ComPtr<ISlangBlob> linkedKernel = m_device->m_glslang.linkSPIRV(kernelCodes);
- if (!linkedKernel)
+ ComPtr<ISlangBlob> linkedKernel;
+ ComPtr<slang::ISession> slangSession;
+ m_device->getSlangSession(slangSession.writeRef());
+ if (kernelCodes.getCount() == 1)
{
- return SLANG_FAIL;
+ linkedKernel = kernelCodes[0];
+ }
+ else
+ {
+ linkedKernel = m_device->m_glslang.linkSPIRV(kernelCodes);
+ if (!linkedKernel)
+ {
+ return SLANG_FAIL;
+ }
}
m_codeBlobs.add(linkedKernel);