diff options
| author | yum <yum.food.vr@gmail.com> | 2025-10-11 13:34:03 -0700 |
|---|---|---|
| committer | yum <yum.food.vr@gmail.com> | 2025-10-17 18:37:45 -0700 |
| commit | 482914e1b42dd44f4696b48c834136631672cebe (patch) | |
| tree | 4d9ef2a7044d25d208daa07b2b1c909210492c53 /source/slang | |
| parent | ff064b9a0f1316007f46710432f854777a520fdf (diff) | |
Optionally disable entry point param cbuffer transform
Diffstat (limited to 'source/slang')
| -rw-r--r-- | source/slang/slang-check-shader.cpp | 7 | ||||
| -rw-r--r-- | source/slang/slang-emit-hlsl.cpp | 12 | ||||
| -rw-r--r-- | source/slang/slang-emit.cpp | 8 | ||||
| -rw-r--r-- | source/slang/slang-options.cpp | 5 |
4 files changed, 30 insertions, 2 deletions
diff --git a/source/slang/slang-check-shader.cpp b/source/slang/slang-check-shader.cpp index b714826de..180cfb413 100644 --- a/source/slang/slang-check-shader.cpp +++ b/source/slang/slang-check-shader.cpp @@ -743,6 +743,13 @@ bool resolveStageOfProfileWithEntryPoint( entryPointProfile.additionalCapabilities.add(entryPointAttr->capabilitySet); return true; } + + if (optionSet.getBoolOption(CompilerOptionName::PlainFunctionEntryPoints)) + { + entryPointProfile.setStage(Stage::Dispatch); + return true; + } + return false; } diff --git a/source/slang/slang-emit-hlsl.cpp b/source/slang/slang-emit-hlsl.cpp index a5d634ebf..60769b0bd 100644 --- a/source/slang/slang-emit-hlsl.cpp +++ b/source/slang/slang-emit-hlsl.cpp @@ -442,6 +442,11 @@ void HLSLSourceEmitter::emitEntryPointAttributesImpl( { if (profile.getVersion() >= ProfileVersion::DX_6_1) { + if (m_codeGenContext->getTargetProgram()->getOptionSet().getBoolOption( + CompilerOptionName::PlainFunctionEntryPoints)) + { + return; + } char const* stageName = getStageName(stage); if (stageName) { @@ -787,6 +792,13 @@ bool HLSLSourceEmitter::tryEmitInstStmtImpl(IRInst* inst) static bool isTargetHLSL2018(HLSLSourceEmitter* emitter, CapabilitySet targetCaps, Stage stage) { + if (stage == Stage::Unknown && + emitter->getTargetProgram()->getOptionSet().getBoolOption( + CompilerOptionName::PlainFunctionEntryPoints)) + { + return false; + } + auto stageAtom = getAtomFromStage(stage); // Cache the result of this function for easier lookup. diff --git a/source/slang/slang-emit.cpp b/source/slang/slang-emit.cpp index bdd7dfe10..e8be11973 100644 --- a/source/slang/slang-emit.cpp +++ b/source/slang/slang-emit.cpp @@ -830,6 +830,7 @@ Result linkAndOptimizeIR( // TODO: We should skip this step for CUDA targets. // (NM): we actually do need to do this step for OptiX based CUDA targets // + if (!targetProgram->getOptionSet().getBoolOption(CompilerOptionName::PlainFunctionEntryPoints)) { CollectEntryPointUniformParamsOptions passOptions; passOptions.targetReq = targetRequest; @@ -862,10 +863,13 @@ Result linkAndOptimizeIR( switch (target) { default: - moveEntryPointUniformParamsToGlobalScope(irModule); + if (!targetProgram->getOptionSet().getBoolOption(CompilerOptionName::PlainFunctionEntryPoints)) + { + moveEntryPointUniformParamsToGlobalScope(irModule); #if 0 - dumpIRIfEnabled(codeGenContext, irModule, "ENTRY POINT UNIFORMS MOVED"); + dumpIRIfEnabled(codeGenContext, irModule, "ENTRY POINT UNIFORMS MOVED"); #endif + } validateIRModuleIfEnabled(codeGenContext, irModule); break; case CodeGenTarget::HostCPPSource: diff --git a/source/slang/slang-options.cpp b/source/slang/slang-options.cpp index fa185d54a..8320e4512 100644 --- a/source/slang/slang-options.cpp +++ b/source/slang/slang-options.cpp @@ -934,6 +934,10 @@ void initCommandOptions(CommandOptions& options) "-embed-downstream-ir", nullptr, "Embed downstream IR into emitted slang IR"}, + {OptionKind::PlainFunctionEntryPoints, + "-plain-function-entry-points", + nullptr, + "Keep entry points as plain functions without moving uniform parameters into global constant buffers"}, }; _addOptions(makeConstArrayView(experimentalOpts), options); @@ -2279,6 +2283,7 @@ SlangResult OptionsParser::_parse(int argc, char const* const* argv) case OptionKind::IncompleteLibrary: case OptionKind::NoHLSLBinding: case OptionKind::NoHLSLPackConstantBufferElements: + case OptionKind::PlainFunctionEntryPoints: case OptionKind::LoopInversion: case OptionKind::UnscopedEnum: case OptionKind::PreserveParameters: |
