void Compile()

in Source/Wrapper/Native.cpp [32:80]


void Compile(SourceDescription* source, OptionsDescription* optionsDesc, TargetDescription* target, ResultDescription* result)
{
    Compiler::SourceDesc sourceDesc;
    sourceDesc.entryPoint = source->entryPoint;
    sourceDesc.source = source->source;
    sourceDesc.stage = source->stage;
    sourceDesc.fileName = nullptr;
    sourceDesc.defines = nullptr;
    sourceDesc.numDefines = 0;

    Compiler::Options options;
    options.packMatricesInRowMajor = optionsDesc->packMatricesInRowMajor;
    options.enable16bitTypes = optionsDesc->enable16bitTypes;
    options.enableDebugInfo = optionsDesc->enableDebugInfo;
    options.disableOptimizations = optionsDesc->disableOptimizations;
    options.optimizationLevel = optionsDesc->optimizationLevel;
    options.shaderModel = {static_cast<uint8_t>(optionsDesc->shaderModel.major), static_cast<uint8_t>(optionsDesc->shaderModel.minor)};
    options.shiftAllTexturesBindings = optionsDesc->shiftAllTexturesBindings;
    options.shiftAllSamplersBindings = optionsDesc->shiftAllSamplersBindings;
    options.shiftAllCBuffersBindings = optionsDesc->shiftAllCBuffersBindings;
    options.shiftAllUABuffersBindings = optionsDesc->shiftAllUABuffersBindings;

    Compiler::TargetDesc targetDesc{};
    targetDesc.language = target->shadingLanguage;
    targetDesc.version = target->version;

    try
    {
        const auto translation = Compiler::Compile(sourceDesc, options, targetDesc);

        if (translation.errorWarningMsg.Size() > 0)
        {
            result->errorWarningMsg = CreateShaderConductorBlob(translation.errorWarningMsg.Data(), translation.errorWarningMsg.Size());
        }
        if (translation.target.Size() > 0)
        {
            result->target = CreateShaderConductorBlob(translation.target.Data(), translation.target.Size());
        }

        result->hasError = translation.hasError;
        result->isText = translation.isText;
    }
    catch (std::exception& ex)
    {
        const char* exception = ex.what();
        result->errorWarningMsg = CreateShaderConductorBlob(exception, static_cast<uint32_t>(strlen(exception)));
        result->hasError = true;
    }
}