diff options
| author | jsmall-nvidia <jsmall@nvidia.com> | 2023-05-02 11:10:58 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-05-02 11:10:58 -0400 |
| commit | 29cb65585782f71a9c6fa1062eaa0b8de8359604 (patch) | |
| tree | cdd820f2c4a8b26933ba4f5057f92e84b8dc01eb /docs/command-line-slangc-reference.md | |
| parent | 19c0866b050a022406867aa650302f4efbf8e010 (diff) | |
Markdown CommandOptions (#2860)
* WIP CommandOptions
* Fix some output issues.
* Simplify word wrapping.
* Add file extensions.
* Change how lookup takes place.
Add appendSplit functions to StringUtil.
Make Categories hold the index range of their options.
* Small improvement.
* Lookup with partial option names.
* Associate user values.
* Encoding flags in the name.
* Refactor setting up of command options.
* Use CommandOptions in slang-options.
* Remove old help text.
* Cache the CommandOptions on the Session.
* Range checking.
Fix bug in the Options handling.
* Extra checks for validity.
* Get categories directly.
* Slight improvements over output.
* Added NameValue types.
* Fix typo.
Remove some now unused diagnostics.
Fix diagnostic in testing, as output has changed.
* Add minimal usage message.
* Remove platform executable extension from diagnostics output.
* Some improvements around getting names from NameValue types.
* Improve some option descriptions.
* Small fixes.
* WIP improvements around CommandOptions.
* Split out CommandOptionsWriter.
* Add links to options.
* Add command line options reference.
* Link to the reference command line information.
* Add quick links.
* Improvements around lookup.
Add categories to linking.
* Small additional fixes.
* Add LinkFlags control.
* Small text fixes.
* Fix typo.
* Fix typo.
* Fix typo.
* Add support for -g and -O using CommandOptions.
* Improve generated doc output/descriptions.
Remove options listed directly in documentation.
Diffstat (limited to 'docs/command-line-slangc-reference.md')
| -rw-r--r-- | docs/command-line-slangc-reference.md | 788 |
1 files changed, 788 insertions, 0 deletions
diff --git a/docs/command-line-slangc-reference.md b/docs/command-line-slangc-reference.md new file mode 100644 index 000000000..e61c4245b --- /dev/null +++ b/docs/command-line-slangc-reference.md @@ -0,0 +1,788 @@ +# Slang Command Line Options + +*Usage:* +``` +slangc [options...] [--] <input files> + +# For help +slangc -h + +# To generate this file +slangc -help-style markdown -h +``` +## Quick Links + +* [General](#General) +* [Target](#Target) +* [Downstream](#Downstream) +* [Debugging](#Debugging) +* [Experimental](#Experimental) +* [Internal](#Internal) +* [Depreciated](#Depreciated) +* [compiler](#compiler) +* [language](#language) +* [archive-type](#archive-type) +* [line-directive-mode](#line-directive-mode) +* [debug-info-format](#debug-info-format) +* [fp-mode](#fp-mode) +* [help-style](#help-style) +* [optimization-level](#optimization-level) +* [debug-level](#debug-level) +* [file-system-type](#file-system-type) +* [target](#target) +* [stage](#stage) +* [capability](#capability) +* [file-extension](#file-extension) + +<a id="General"></a> +# General + +General options + +<a id="D"></a> +## -D + +**-D<name>\[=<value>\], -D <name>\[=<value>\]** + +Insert a preprocessor macro. + +The space between - D and <name> is optional. If no <value> is specified, Slang will define the macro with an empty value. + + +<a id="depfile"></a> +## -depfile + +**-depfile <path>** + +Save the source file dependency list in a file. + + +<a id="entry"></a> +## -entry + +**-entry <name>** + +Specify the name of an entry-point function. + +When compiling from a single file, this defaults to main if you specify a stage using [-stage](#stage-1). + +Multiple [-entry](#entry) options may be used in a single invocation. When they do, the file associated with the entry point will be the first one found when searching to the left in the command line. + +If no [-entry](#entry) options are given, compiler will use \[shader(...)\] attributes to detect entry points. + + +<a id="emit-ir"></a> +## -emit-ir +Emit IR typically as a '.slang-module' when outputting to a container. + + +<a id="h"></a> +## -h, -help, --help + +**-h or -h <help-category>** + +Print this message, or help in specified category. + + +<a id="help-style-1"></a> +## -help-style + +**-help-style <[help-style](#help-style)>** + +Help formatting style + + +<a id="I"></a> +## -I + +**-I<path>, -I <path>** + +Add a path to be used in resolving '#include' and 'import' operations. + + +<a id="lang"></a> +## -lang + +**-lang <[language](#language)>** + +Set the language for the following input files. + + +<a id="matrix-layout-column-major"></a> +## -matrix-layout-column-major +Set the default matrix layout to column-major. + + +<a id="matrix-layout-row-major"></a> +## -matrix-layout-row-major +Set the default matrix layout to row-major. + + +<a id="module-name"></a> +## -module-name + +**-module-name <name>** + +Set the module name to use when compiling multiple .slang source files into a single module. + + +<a id="o"></a> +## -o + +**-o <path>** + +Specify a path where generated output should be written. + +If no [-target](#target-1) or [-stage](#stage-1) is specified, one may be inferred from file extension (see [<file-extension>](#file-extension)). If multiple [-target](#target-1) options and a single [-entry](#entry) are present, each [-o](#o) associates with the first [-target](#target-1) to its left. Otherwise, if multiple [-entry](#entry) options are present, each [-o](#o) associates with the first [-entry](#entry) to its left, and with the [-target](#target-1) that matches the one inferred from <path>. + + +<a id="profile"></a> +## -profile + +**-profile <profile>\[+<[capability](#capability)>...\]** + +Specify the shader profile for code generation. + +Accepted profiles are: + +* sm_{4_0,4_1,5_0,5_1,6_0,6_1,6_2,6_3,6_4,6_5,6_6} + +* glsl_{110,120,130,140,150,330,400,410,420,430,440,450,460} + +Additional profiles that include [-stage](#stage-1) information: + +* {vs,hs,ds,gs,ps}_<version> + +See [-capability](#capability-1) for information on [<capability>](#capability) + +When multiple [-target](#target-1) options are present, each [-profile](#profile) associates with the first [-target](#target-1) to its left. + + +<a id="stage-1"></a> +## -stage + +**-stage <[stage](#stage)>** + +Specify the stage of an entry-point function. + +When multiple [-entry](#entry) options are present, each [-stage](#stage-1) associated with the first [-entry](#entry) to its left. + +May be omitted if entry-point function has a \[shader(...)\] attribute; otherwise required for each [-entry](#entry) option. + + +<a id="target-1"></a> +## -target + +**-target <[target](#target)>** + +Specifies the format in which code should be generated. + + +<a id="v"></a> +## -v, -version +Display the build version. This is the contents of git describe --tags. + +It is typically only set from automated builds(such as distros available on github).A user build will by default be 'unknown'. + + +<a id="warnings-as-errors"></a> +## -warnings-as-errors + +**-warnings-as-errors all or -warnings-as-errors <id>\[,<id>...\]** + +all - Treat all warnings as errors. + +<id>\[,<id>...\]: Treat specific warning ids as errors. + + + + +<a id="warnings-disable"></a> +## -warnings-disable + +**-warnings-disable <id>\[,<id>...\]** + +Disable specific warning ids. + + +<a id="W"></a> +## -W + +**-W<id>** + +Enable a warning with the specified id. + + +<a id="Wno"></a> +## -Wno- + +**-Wno-<id>** + +Disable warning with <id> + + +<a id="dump-warning-diagnostics"></a> +## -dump-warning-diagnostics +Dump to output list of warning diagnostic numeric and name ids. + + +<a id="id"></a> +## -- +Treat the rest of the command line as input files. + + + +<a id="Target"></a> +# Target + +Target code generation options + +<a id="capability-1"></a> +## -capability + +**-capability <[capability](#capability)>\[+<[capability](#capability)>...\]** + +Add optional capabilities to a code generation target. See Capabilities below. + + +<a id="default-image-format-unknown"></a> +## -default-image-format-unknown +Set the format of R/W images with unspecified format to 'unknown'. Otherwise try to guess the format. + + +<a id="disable-dynamic-dispatch"></a> +## -disable-dynamic-dispatch +Disables generating dynamic dispatch code. + + +<a id="disable-specialization"></a> +## -disable-specialization +Disables generics and specialization pass. + + +<a id="fp-mode-1"></a> +## -fp-mode, -floating-point-mode + +**-fp-mode <[fp-mode](#fp-mode)>, -floating-point-mode <[fp-mode](#fp-mode)>** + +Control floating point optimizations + + +<a id="g"></a> +## -g + +**-g, -g<[debug-info-format](#debug-info-format)>, -g<[debug-level](#debug-level)>** + +Include debug information in the generated code, where possible. + +[<debug-level>](#debug-level) is the amount of information, 0..3, unspecified means 2 + +[<debug-info-format>](#debug-info-format) specifies a debugging info format + +It is valid to have multiple [-g](#g) options, such as a [<debug-level>](#debug-level) and a [<debug-info-format>](#debug-info-format) + + +<a id="line-directive-mode-1"></a> +## -line-directive-mode + +**-line-directive-mode <[line-directive-mode](#line-directive-mode)>** + +Sets how the `#line` directives should be produced. Available options are: + +If not specified, default behavior is to use C-style `#line` directives for HLSL and C/C++ output, and traditional GLSL-style `#line` directives for GLSL output. + + +<a id="O"></a> +## -O + +**-O<[optimization-level](#optimization-level)>** + +Set the optimization level. + + +<a id="obfuscate"></a> +## -obfuscate +Remove all source file information from outputs. + + + +<a id="Downstream"></a> +# Downstream + +Downstream compiler options + +<a id="none-path"></a> +## -none-path, -fxc-path, -dxc-path, -glslang-path, -visualstudio-path, -clang-path, -gcc-path, -genericcpp-path, -nvrtc-path, -llvm-path + +**-<[compiler](#compiler)>-path <path>** + +Specify path to a downstream [<compiler>](#compiler) executable or library. + + + + +<a id="default-downstream-compiler"></a> +## -default-downstream-compiler + +**-default-downstream-compiler <[language](#language)> <[compiler](#compiler)>** + +Set a default compiler for the given language. See [-lang](#lang) for the list of languages. + + +<a id="X"></a> +## -X + +**-X<[compiler](#compiler)> <option> -X<[compiler](#compiler)>... <options> -X.** + +Pass arguments to downstream [<compiler>](#compiler). Just [-X<compiler>](#X) passes just the next argument to the downstream compiler. [-X<compiler>](#X)... options [-X](#X). will pass *all* of the options inbetween the opening [-X](#X) and [-X](#X). to the downstream compiler. + + +<a id="pass-through"></a> +## -pass-through + +**-pass-through <[compiler](#compiler)>** + +Pass the input through mostly unmodified to the existing compiler [<compiler>](#compiler). + +These are intended for debugging/testing purposes, when you want to be able to see what these existing compilers do with the "same" input and options + + + +<a id="Debugging"></a> +# Debugging + +Compiler debugging/instrumentation options + +<a id="dump-ast"></a> +## -dump-ast +Dump the AST to a .slang-ast file next to the input. + + +<a id="dump-intermediate-prefix"></a> +## -dump-intermediate-prefix + +**-dump-intermediate-prefix <prefix>** + +File name prefix for [-dump-intermediates](#dump-intermediates) outputs, default is 'slang-dump-' + + +<a id="dump-intermediates"></a> +## -dump-intermediates +Dump intermediate outputs for debugging. + + +<a id="dump-ir"></a> +## -dump-ir +Dump the IR for debugging. + + +<a id="dump-ir-ids"></a> +## -dump-ir-ids +Dump the IDs with [-dump-ir](#dump-ir) (debug builds only) + + +<a id="dump-repro"></a> +## -dump-repro +Dump a `.slang-repro` file that can be used to reproduce a compilation on another machine. + + + + +<a id="dump-repro-on-error"></a> +## -dump-repro-on-error +Dump `.slang-repro` file on any compilation error. + + +<a id="E"></a> +## -E, -output-preprocessor +Output the preprocessing result and exit. + + +<a id="extract-repro"></a> +## -extract-repro + +**-extract-repro <name>** + +Extract the repro files into a folder. + + +<a id="load-repro-directory"></a> +## -load-repro-directory + +**-load-repro-directory <path>** + +Use repro along specified path + + +<a id="load-repro"></a> +## -load-repro + +**-load-repro <name>** + +Load repro + + +<a id="no-codegen"></a> +## -no-codegen +Skip the code generation step, just check the code and generate layout. + + +<a id="output-includes"></a> +## -output-includes +Print the hierarchy of the processed source files. + + +<a id="repro-file-system"></a> +## -repro-file-system + +**-repro-file-system <name>** + +Use a repro as a file system + + +<a id="serial-ir"></a> +## -serial-ir +Serialize the IR between front-end and back-end. + + +<a id="skip-codegen"></a> +## -skip-codegen +Skip the code generation phase. + + +<a id="validate-ir"></a> +## -validate-ir +Validate the IR between the phases. + + +<a id="verbose-paths"></a> +## -verbose-paths +When displaying diagnostic output aim to display more detailed path information. In practice this is typically the complete 'canonical' path to the source file used. + + +<a id="verify-debug-serial-ir"></a> +## -verify-debug-serial-ir +Verify IR in the front-end. + + + +<a id="Experimental"></a> +# Experimental + +Experimental options (use at your own risk) + +<a id="emit-spirv-directly"></a> +## -emit-spirv-directly +Generate SPIR-V output directly (otherwise through GLSL and using the glslang compiler) + + +<a id="file-system"></a> +## -file-system + +**-file-system <[file-system-type](#file-system-type)>** + +Set the filesystem hook to use for a compile request. + + +<a id="heterogeneous"></a> +## -heterogeneous +Output heterogeneity-related code. + + +<a id="no-mangle"></a> +## -no-mangle +Do as little mangling of names as possible. + + + +<a id="Internal"></a> +# Internal + +Internal-use options (use at your own risk) + +<a id="archive-type-1"></a> +## -archive-type + +**-archive-type <[archive-type](#archive-type)>** + +Set the archive type for [-save-stdlib](#save-stdlib). Default is zip. + + +<a id="compile-stdlib"></a> +## -compile-stdlib +Compile the StdLib from embedded sources. Will return a failure if there is already a StdLib available. + + +<a id="doc"></a> +## -doc +Write documentation for [-compile-stdlib](#compile-stdlib) + + +<a id="ir-compression"></a> +## -ir-compression + +**-ir-compression <type>** + +Set compression for IR and AST outputs. + +Accepted compression types: none, lite + + +<a id="load-stdlib"></a> +## -load-stdlib + +**-load-stdlib <filename>** + +Load the StdLib from file. + + +<a id="r"></a> +## -r + +**-r <name>** + +reference module <name> + + +<a id="save-stdlib"></a> +## -save-stdlib + +**-save-stdlib <filename>** + +Save the StdLib modules to an archive file. + + +<a id="save-stdlib-bin-source"></a> +## -save-stdlib-bin-source + +**-save-stdlib-bin-source <filename>** + +Same as [-save-stdlib](#save-stdlib) but output the data as a C array. + + + + +<a id="track-liveness"></a> +## -track-liveness +Enable liveness tracking. Places SLANG_LIVE_START, and SLANG_LIVE_END in output source to indicate value liveness. + + + +<a id="Depreciated"></a> +# Depreciated + +Deprecated options (allowed but ignored; may be removed in future) + +<a id="parameter-blocks-use-register-spaces"></a> +## -parameter-blocks-use-register-spaces +Parameter blocks will use register spaces + + + +<a id="compiler"></a> +# compiler + +Downstream Compilers (aka Pass through) + +* `none` : Unknown +* `fxc` : FXC HLSL compiler +* `dxc` : DXC HLSL compiler +* `glslang` : GLSLANG GLSL compiler +* `visualstudio`, `vs` : Visual Studio C/C++ compiler +* `clang` : Clang C/C++ compiler +* `gcc` : GCC C/C++ compiler +* `genericcpp`, `c`, `cpp` : A generic C++ compiler (can be any one of visual studio, clang or gcc depending on system and availability) +* `nvrtc` : NVRTC CUDA compiler +* `llvm` : LLVM/Clang `slang-llvm` + +<a id="language"></a> +# language + +Language + +* `c`, `C` : C language +* `cpp`, `c++`, `C++`, `cxx` : C++ language +* `slang` : Slang language +* `glsl` : GLSL language +* `hlsl` : HLSL language +* `cu`, `cuda` : CUDA + +<a id="archive-type"></a> +# archive-type + +Archive Type + +* `riff-deflate` : Slang RIFF using deflate compression +* `riff-lz4` : Slang RIFF using LZ4 compression +* `zip` : Zip file +* `riff` : Slang RIFF without compression + +<a id="line-directive-mode"></a> +# line-directive-mode + +Line Directive Mode + +* `none` : Don't emit `#line` directives at all +* `source-map` : Use source map to track line associations (doen't emit #line) +* `default` : Default behavior +* `standard` : Emit standard C-style `#line` directives. +* `glsl` : Emit GLSL-style directives with file *number* instead of name. + +<a id="debug-info-format"></a> +# debug-info-format + +Debug Info Format + +* `default-format` : Use the default debugging format for the target +* `c7` : CodeView C7 format (typically means debugging infomation is embedded in the binary) +* `pdb` : Program database +* `stabs` : STABS debug format +* `coff` : COFF debug format +* `dwarf` : DWARF debug format + +<a id="fp-mode"></a> +# fp-mode + +Floating Point Mode + +* `precise` : Disable optimization that could change the output of floating-point computations, including around infinities, NaNs, denormalized values, and negative zero. Prefer the most precise versions of special functions supported by the target. +* `fast` : Allow optimizations that may change results of floating-point computations. Prefer the fastest version of special functions supported by the target. +* `default` : Default floating point mode + +<a id="help-style"></a> +# help-style + +Help Style + +* `text` : Text suitable for output to a terminal +* `markdown` : Markdown +* `no-link-markdown` : Markdown without links + +<a id="optimization-level"></a> +# optimization-level + +Optimization Level + +* `0`, `none` : Disable all optimizations +* `1`, `default` : Enable a default level of optimization.This is the default if no [-o](#o) options are used. +* `2`, `high` : Enable aggressive optimizations for speed. +* `3`, `maximal` : Enable further optimizations, which might have a significant impact on compile time, or involve unwanted tradeoffs in terms of code size. + +<a id="debug-level"></a> +# debug-level + +Debug Level + +* `0`, `none` : Don't emit debug information at all. +* `1`, `minimal` : Emit as little debug information as possible, while still supporting stack traces. +* `2`, `standard` : Emit whatever is the standard level of debug information for each target. +* `3`, `maximal` : Emit as much debug information as possible for each target. + +<a id="file-system-type"></a> +# file-system-type + +File System Type + +* `default` : Default fike system. +* `load-file` : Just implements loadFile interface, so will be wrapped with CacheFileSystem internally. +* `os` : Use the OS based file system directly (without file system caching) + +<a id="target"></a> +# target + +Target + +* `unknown` +* `none` +* `hlsl` : HLSL source code +* `dxbc` : DirectX shader bytecode binary +* `dxbc-asm`, `dxbc-assembly` : DirectX shader bytecode assembly +* `dxil` : DirectX Intermediate Language binary +* `dxil-asm`, `dxil-assembly` : DirectX Intermediate Language assembly +* `glsl` : GLSL source code +* `glsl-vulkan` : GLSL Vulkan source code +* `glsl-vulkan-one-desc` : GLSL Vulkan source code +* `spirv` : SPIR-V binary +* `spirv-asm`, `spirv-assembly` : SPIR-V assembly +* `c` : C source code +* `cpp`, `c++`, `cxx` : C++ source code +* `torch`, `torch-binding`, `torch-cpp`, `torch-cpp-binding` : C++ for pytorch binding +* `host-cpp`, `host-c++`, `host-cxx` : C++ source for host execution +* `exe`, `executable` : Executable binary +* `sharedlib`, `sharedlibrary`, `dll` : Shared library/Dll +* `cuda`, `cu` : CUDA source code +* `ptx` : PTX assembly +* `cuobj`, `cubin` : CUDA binary +* `host-callable`, `callable` : Host callable +* `object-code` : Object code +* `host-host-callable` : Host callable for host execution + +<a id="stage"></a> +# stage + +Stage + +* `vertex` +* `hull` +* `domain` +* `geometry` +* `pixel`, `fragment` +* `compute` +* `raygeneration` +* `intersection` +* `anyhit` +* `closesthit` +* `miss` +* `callable` +* `mesh` +* `amplification` + +<a id="capability"></a> +# capability + +A capability describes an optional feature that a target may or may not support. When a [-capability](#capability-1) is specified, the compiler may assume that the target supports that capability, and generate code accordingly. + +* `spirv_1_{ 0`, `1`, `2`, `3`, `4`, `5 }` : minimum supported SPIR - V version +* `invalid` +* `hlsl` +* `glsl` +* `c` +* `cpp` +* `cuda` +* `spirv_direct` +* `GL_NV_ray_tracing` : enables the GL_NV_ray_tracing extension +* `GL_EXT_ray_tracing` : enables the GL_EXT_ray_tracing extension +* `GL_NV_fragment_shader_barycentric` : enables the GL_NV_fragment_shader_barycentric extension +* `GL_EXT_fragment_shader_barycentric` : enables the GL_EXT_fragment_shader_barycentric extension + +<a id="file-extension"></a> +# file-extension + +A [<language>](#language), <format>, and/or [<stage>](#stage) may be inferred from the extension of an input or [-o](#o) path + +* `hlsl`, `fx` : hlsl +* `dxbc` +* `dxbc-asm` : dxbc-assembly +* `dxil` +* `dxil-asm` : dxil-assembly +* `glsl` +* `vert` : glsl (vertex) +* `frag` : glsl (fragment) +* `geom` : glsl (geoemtry) +* `tesc` : glsl (hull) +* `tese` : glsl (domain) +* `comp` : glsl (compute) +* `slang` +* `spv` : SPIR-V +* `spv-asm` : SPIR-V assembly +* `c` +* `cpp`, `c++`, `cxx` : C++ +* `exe` : executable +* `dll`, `so` : sharedlibrary/dll +* `cu` : CUDA +* `ptx` : PTX +* `obj`, `o` : object-code +* `zip` : container +* `slang-module`, `slang-library` : Slang Module/Library +* `dir` : Container as a directory + |
