diff options
Diffstat (limited to 'source/compiler-core')
| -rw-r--r-- | source/compiler-core/slang-downstream-compiler.h | 13 | ||||
| -rw-r--r-- | source/compiler-core/slang-dxc-compiler.cpp | 16 |
2 files changed, 29 insertions, 0 deletions
diff --git a/source/compiler-core/slang-downstream-compiler.h b/source/compiler-core/slang-downstream-compiler.h index c23a6eff0..6ffcf7aea 100644 --- a/source/compiler-core/slang-downstream-compiler.h +++ b/source/compiler-core/slang-downstream-compiler.h @@ -197,6 +197,13 @@ struct DownstreamCompileOptions Precise, }; + enum class FloatingPointDenormalMode : uint8_t + { + Any, + Preserve, + FlushToZero, + }; + enum PipelineType : uint8_t { Unknown, @@ -277,6 +284,11 @@ struct DownstreamCompileOptions // The debug info format to use. SlangDebugInfoFormat m_debugInfoFormat = SLANG_DEBUG_INFO_FORMAT_DEFAULT; + + // The floating point denormal handling mode to use for each floating point precision + FloatingPointDenormalMode denormalModeFp16 = FloatingPointDenormalMode::Any; + FloatingPointDenormalMode denormalModeFp32 = FloatingPointDenormalMode::Any; + FloatingPointDenormalMode denormalModeFp64 = FloatingPointDenormalMode::Any; }; static_assert(std::is_trivially_copyable_v<DownstreamCompileOptions>); @@ -482,6 +494,7 @@ struct DownstreamCompilerUtilBase typedef CompileOptions::DebugInfoType DebugInfoType; typedef CompileOptions::FloatingPointMode FloatingPointMode; + typedef CompileOptions::FloatingPointDenormalMode FloatingPointDenormalMode; typedef DownstreamProductFlag ProductFlag; typedef DownstreamProductFlags ProductFlags; diff --git a/source/compiler-core/slang-dxc-compiler.cpp b/source/compiler-core/slang-dxc-compiler.cpp index 0d4bc0a59..e27a0fc37 100644 --- a/source/compiler-core/slang-dxc-compiler.cpp +++ b/source/compiler-core/slang-dxc-compiler.cpp @@ -512,6 +512,22 @@ SlangResult DXCDownstreamCompiler::compile(const CompileOptions& inOptions, IArt break; } + switch (options.denormalModeFp32) + { + default: + case CompileOptions::FloatingPointDenormalMode::Any: + break; + + case CompileOptions::FloatingPointDenormalMode::Preserve: + args.add(L"-denorm"); + args.add(L"preserve"); + break; + + case CompileOptions::FloatingPointDenormalMode::FlushToZero: + args.add(L"-denorm"); + args.add(L"ftz"); + break; + } switch (options.optimizationLevel) { |
