in Source/Core/ShaderConductor.cpp [1080:1151]
void Compiler::Compile(const SourceDesc& source, const Options& options, const TargetDesc* targets, uint32_t numTargets,
ResultDesc* results)
{
SourceDesc sourceOverride = source;
if (!sourceOverride.entryPoint || (std::strlen(sourceOverride.entryPoint) == 0))
{
sourceOverride.entryPoint = "main";
}
if (!sourceOverride.loadIncludeCallback)
{
sourceOverride.loadIncludeCallback = DefaultLoadCallback;
}
bool hasDxil = false;
bool hasDxilModule = false;
bool hasSpirV = false;
for (uint32_t i = 0; i < numTargets; ++i)
{
if (targets[i].language == ShadingLanguage::Dxil)
{
hasDxil = true;
if (targets[i].asModule)
{
hasDxilModule = true;
}
}
else
{
hasSpirV = true;
}
}
ResultDesc dxilBinaryResult{};
if (hasDxil)
{
dxilBinaryResult = CompileToBinary(sourceOverride, options, ShadingLanguage::Dxil, false);
}
ResultDesc dxilModuleBinaryResult{};
if (hasDxilModule)
{
dxilModuleBinaryResult = CompileToBinary(sourceOverride, options, ShadingLanguage::Dxil, true);
}
ResultDesc spirvBinaryResult{};
if (hasSpirV)
{
spirvBinaryResult = CompileToBinary(sourceOverride, options, ShadingLanguage::SpirV, false);
}
for (uint32_t i = 0; i < numTargets; ++i)
{
ResultDesc binaryResult;
if (targets[i].language == ShadingLanguage::Dxil)
{
if (targets[i].asModule)
{
binaryResult = dxilModuleBinaryResult;
}
else
{
binaryResult = dxilBinaryResult;
}
}
else
{
binaryResult = spirvBinaryResult;
}
results[i] = ConvertBinary(binaryResult, sourceOverride, options, targets[i]);
}
}